快速掌握23种设计模式(工厂,单例,原型)

工厂模式:

 

简单工厂模式:

        由类结构上看,简单工厂模式和状态模式是没什么区别。那么之所以还会单独抽取出一种模式,还是那句话。这主要体现在了业务语义上即用工厂生产对象而不是直接的new出来。

 

 

工厂方法模式:

        不过不太明白为什么叫这个名字,不过别人都叫,那么就这么叫吧。不过从类结构上来命名的话应该叫做抽象工厂生产抽象产品的模式。即此模式的类结构包括一个抽象工厂类及若干个具体的工厂实现类,还包括一个抽象产品类及多个具体产品的实现类,最终用抽象工厂生产抽象产品。这相对于简单工厂来说是进一步抽象了工厂,即增加的工厂的生产分工。也就是随着社会化大生产的进行,社会生产越来越详细。

 

 

抽象工厂模式:

随着社会化大生产的进一步发展,一个工厂已经不能再单独的生产一个商品。而是一个工厂生产产品的一个具体的零部件。本人觉得此工厂造成结构有些复杂而且比较少用,所以就不赘余了。

 


 

单例模式

饿汉模式:

public class Singleton {  
      private Singleton instance = null;  
      static {  
                         instance = new Singleton();  
      }  
      private Singleton (){}
      public static Singleton getInstance() {  
      return this.instance;  
      }  
 }  

 

懒汉模式1(线程不安全,不能用):

public class Singleton {  
      private static Singleton instance;  
      private Singleton (){}   
      public static Singleton getInstance() {  
      if (instance == null) {  
          instance = new Singleton();  
      }  
      return instance;  
      }  
 }

 懒汉模式2(线程安全,效率低下,不知道谁研究出来的)

public class Singleton {  
      private static Singleton instance;  
      private Singleton (){}
      public static synchronized Singleton getInstance() {  
      if (instance == null) {  
          instance = new Singleton();  
      }  
      return instance;  
      }  
 }

懒汉模式3(还是错误,效率也低,不知道谁研究出来的)

public class Singleton {  
                    private static Singleton singleton;  
                    private Singleton (){}   
                   public static Singleton getSingleton() {  
    if (singleton == null) {  
       synchronized (Singleton.class) {  
         if (singleton == null) {  
            singleton = new Singleton();  
         }  
       }  
     }  
     return singleton;  
     }

这里值得注意的是,此双重检查的模式还是没有打到线程安全的目的。当然这是因为java程序语言执行过程中指令重排序造成的。这里的指令重排序包含编译阶段的冲排序,cup阶段的重排序,内存系统的重排序。而  singleton = new Singleton();  这句代码并不是原子的,具体表现为这句代码分为两个步骤singleton 对象开辟内存空间和singleton 对象初始化,如果对着两步重排序必定造成一些问题,当然现在引入volatile 关键字会解决这一问题。具体也不说了,再说就扯远了。因为我感觉单例模式的懒加载的模式在绝大多数的情况下毫无意义。

 

 

原型模式

原型模式也是属于一种创建对象的方法,特殊的是它是自己创建自己的方法,也就是克隆自己。在代码结构的角度来说也就是调用对象自己的某个方法,new出自己并给new出的对象的属性进行赋值(反射的方法给自己进行对象的克隆)。这典型体现在jdk当中的Clone接口。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值