Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】

一)、工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的
设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使
其创建过程延迟到子类进行。
实现:
我们将创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory。
FactoryPatternDemo,我们的演示类使用 ShapeFactory 来获取 Shape 对象。
它将向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便
获取它所需对象的类型。

步骤 1
创建一个接口:
Shape.java
public interface Shape {
   void draw();
}
步骤 2
创建实现接口的实体类。
Rectangle.java
public class Rectangle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}
Square.java
public class Square implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}
Circle.java
public class Circle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}
步骤 3
创建一个工厂,生成基于给定信息的实体类的对象。
ShapeFactory.java
public class ShapeFactory {
    
   //使用 getShape 方法获取形状类型的对象
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }        
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      return null;
   }
}
步骤 4
使用该工厂,通过传递类型信息来获取实体类的对象。
FactoryPatternDemo.java
public class FactoryPatternDemo {
 
   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();
 
      //获取 Circle 的对象,并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");
 
      //调用 Circle 的 draw 方法
      shape1.draw();
 
      //获取 Rectangle 的对象,并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
 
      //调用 Rectangle 的 draw 方法
      shape2.draw();
 
      //获取 Square 的对象,并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");
 
      //调用 Square 的 draw 方法
      shape3.draw();
   }
}
步骤 5
执行程序,输出结果:
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.
二)、单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型
的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单
个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访
问,不需要实例化该类的对象。
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

保证一个类仅有一个实例,并提供一个访问它的全局访问点。
判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
注意事项:
getInstance() 方法中需要使用同步锁 synchronized (Singleton.class)
 防止多线程同时进入造成 instance 被多次实例化。

实现
我们将创建一个 SingleObject 类。SingleObject 类有它的私有构造函数
和本身的一个静态实例。
SingleObject 类提供了一个静态方法,供外界获取它的静态实例。
SingletonPatternDemo,我们的演示类使用 SingleObject 类来
获取 SingleObject对象。

步骤 1
创建一个 Singleton 类。
SingleObject.java
public class SingleObject {
 
   //创建 SingleObject 的一个对象
   private static SingleObject instance = new SingleObject();
 
   //让构造函数为 private,这样该类就不会被实例化
   private SingleObject(){}
 
   //获取唯一可用的对象
   public static SingleObject getInstance(){
      return instance;
   }
 
   public void showMessage(){
      System.out.println("Hello World!");
   }
}
步骤 2
从 singleton 类获取唯一的对象。
SingletonPatternDemo.java
public class SingletonPatternDemo {
   public static void main(String[] args) {
 
      //不合法的构造函数
      //编译时错误:构造函数 SingleObject() 是不可见的
      //SingleObject object = new SingleObject();
 
      //获取唯一可用的对象
      SingleObject object = SingleObject.getInstance();
 
      //显示消息
      object.showMessage();
   }
}
步骤 3
执行程序,输出结果:
Hello World!
原文地址:https://www.cnblogs.com/xiaoshubass/p/13280618.html