美文网首页
创建模式

创建模式

作者: 小张同学_loveZY | 来源:发表于2018-08-17 15:27 被阅读0次

1. 单例模式

场景:唯一的情况。
1: 饿汉式

{
    public class Singleton {  
    //直接在这里创建类实例,只会创建一次  
    private static Singleton instance = new Singleton();  
    //私有化构造方法,好在内部控制创建实例的数目  
    private Singleton(){          
    }  
    //定义一个方法来为客户端提供类实例   
    public static Singleton getInstance(){  
        return instance;  
    }
}  
  • 为了不用创建类而可以直接访问,必须定义为static字段和static get方法
  • 为了不被创建,必须设定方法为私有
缺点 :
  • 不管用不用到,都直接创建类。不是懒加载

2: 懒汉式

{
    public class Singleton {  
        
        //初始不创建
      private static Singleton instance = null;  
      private Singleton(){      
      }
        
        //用到才创建
      public static  Singleton getInstance(){  

          if(instance == null){  
              //二级判断,避免等待锁浪费时间  
              synchronized(Singleton.class){  
                  //再次检查,避免创建时多个线程创建  
                  if(instance == null){  
                      instance = new Singleton();  
                  }  
              }  
          }  
          return instance;  
      }  
    }
}
  • 优点 懒加载
  • 缺点 判断比较多

2. 简单工厂

  • 简单工厂的本质是:选择实现
  • 接口:将外部功能调用,和内部具体实现分离
  • 为了在调用的时候不需要知道具体的实现类,故用到简单
  • 这里如果是多个实现的话,需要在createApi中加入参数
  • 但是参数也暴露了内容,因此可以通过配置文件 properties 进行配置,并且通过放射获取真正的类创建。
  • 角色:工厂,抽象产品,具体产品 体现开闭原则

3. 工厂方法模式

  • 工厂方法模式的本质:延迟到子类来选择实现。
  • 在简单工厂模式基础上,抽象出工厂类,通过具体工厂类来生成具体实现类。
  • 优势,体现了依赖倒置原则,避免了上层对于具体实现的依赖,也便于程序扩展。
  • 角色: 抽象工厂,具体工厂,一个抽象产品,具体产品

4. 抽象工厂模式

  • 抽象工厂模式的本质:选择产品簇的实现。
  • 与工厂模式相比,其实就是在每一个具体实现中,不止生成一个产品,而是生成一个生产线上的多个产品。而这多个产品相互关联。
  • 角色: 抽象工厂,具体工厂(含生产线,可生成多个抽象产品),多个抽象产品,具体产品

5. 建造者模式

  • 生成器模式的本质:分离整体构建算法和部件构造。用于复杂的生成模型中。
  • 生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品
  • 角色
    • 指导者: 负责具体产品生成步骤,如打鱼,再杀鱼,后晒鱼
    • 抽象生成器: 定义产品生成方法。
    • 具体生成器: 具体的方法,如怎么打鱼,怎么杀鱼,怎么晒鱼。

6. 原型模式

  • 原型模式需要实现一个可以深度clone自身的接口,从而可以通过自身克隆新的原型对象。
  • 克隆出来的新的对象实例复制原型实例属性的值
    • 浅度克隆:只负责克隆按值传递的数据
    • 深度克隆:还负责克隆引用类型的数据
  • 原型模式的本质:克隆生成对象。
  • 原型模式可以使新生成的对象持有原来对象的部分或全部属性,而不需要在客户端制定。对于一些需要访问数据库啊,远程主机等耗时获取数据的应用,异常有用。

相关文章

网友评论

      本文标题:创建模式

      本文链接:https://www.haomeiwen.com/subject/sbxtiftx.html