JAVA设计模式

Author Avatar
itning 6月 07, 2018
  • 在其它设备中阅读本文章

软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。

单例设计模式

单例对象的类必须保证只有一个实例存在。

推荐使用饿汉式单例设计模式

饿汉式单例设计模式

  1. 私有化构造函数。
  2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
  3. 提供一个公共静态的方法获取本类的对象。
class Single{
    //声明本类的引用类型变量,并且使用该变量指向本类对象
    private static    Single s = new Single();
    //私有化构造函数
    private Single(){}
    //提供一个公共静态的方法获取本类的对象
    public    static  Single getInstance(){
        return s;
    }
}

懒汉式单例设计模式

  1. 私有化构造函数。
  2. 声明本类的引用类型变量,但是不要创建对象,
  3. 提供公共静态 的方法获取本类 的对象,获取之前先判断是否已经创建了本类 对象
    ,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,
    然后再返回。
 class Single2{
      //声明本类的引用类型变量,不创建本类的对象
      private static Single2 s;
      //私有化了构造函数
      private Single2(){}
      //懒汉式设计模式有线程安全问题 简单解决:synchronized
      public static synchronized Single2 getInstance(){
          if(s==null){
              s = new Single2();
          }
          return s;
      }
  }

工厂设计模式

工厂方法模式(常用)

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。

适用场景:

(1)客户端不需要知道它所创建的对象的类。例子中我们不知道每个图片加载器具体叫什么名,只知道创建它的工厂名就完成了床架过程。
(2)客户端可以通过子类来指定创建对应的对象。
以上场景使用于采用工厂方法模式。


现在需要设计一个这样的图片加载类,它具有多个图片加载器,用来加载jpg,png格式的图片,每个加载器都有一个read()方法,用于读取图片。

//编写一个加载器的公共接口。
public interface Reader {
    void read();
}

//Jpg图片加载器
public class JpgReader implements Reader {
    @Override
    public void read() {
        System.out.print("read jpg");
    }
}

//Png图片加载器
public class PngReader implements Reader {
    @Override
    public void read() {
        System.out.print("read png");
    }
}

//定义一个抽象的工厂接口ReaderFactory
public interface ReaderFactory {
    Reader getReader();
}

//Jpg加载器工厂
public class JpgReaderFactory implements ReaderFactory {
    @Override
    public Reader getReader() {
        return new JpgReader();
    }
}

//Png加载器工厂
public class PngReaderFactory implements ReaderFactory {
    @Override
    public Reader getReader() {
        return new PngReader();
    }
}

//读取Jpg
ReaderFactory factory=new JpgReaderFactory();
Reader reader=factory.getReader();
reader.read();

//读取Png
ReaderFactory factory=new PngReaderFactory();
Reader reader=factory.getReader();
reader.read();

原创内容,转载请注明出处!
本文链接:https://blog.itning.top/posts/J2SE/20180607-JAVA-design-pattern.html