几个常用创建型设计模式总结

来源:互联网 发布:linux查看ssh端口号 编辑:程序博客网 时间:2024/05/20 20:17

1.1工厂设计模式

 

1.1.1简单工厂模式:用一个工厂类生产实例,用ifelse语句,选择生成实例的类型。

 

        缺点:不符合开闭原则,每当要加入新的类型时就要修改工厂类的代码。

        角色:工厂类、抽象产品、具体产品。

 

1.1.2工厂方法模式;提供一个抽象工厂类,每个具体工厂类实现该接口,只生产一种产品。这样,每次加入新的类型只需要加入一个工厂类和一个具体类型。

 

        缺点:具有唯一性。

        角色:抽象工厂、具体工厂、抽象产品、具体产品。

 

引入两个概念:

         (1)产品等级结构:即产品的继承结构。如一个抽象类是电视机其子类有海尔电视机,TCL电视机等等,则抽象电视机和具体品牌的电视机之间构成了一个产品等级结构。抽象电视机是父类,具体品牌电视机是子类。一个产品等级结构可以理解为一个具有特定功能的产品,如电视机、电冰箱、空调功能各不相同,各为一个产品等级结构。

         (2)产品族:指由同一个工厂生产的,位于不同的产品等级结构中的一组产品。

 

1.1.3抽象工厂模式:有时候,我们希望工厂可以提供多个产品,而不是单一产品。如一个电气工厂,它可以生产电视机、电冰箱、空调等等电器。抽象工厂模式负责创建一个产品族,而不是单一产品。相比工厂方法,抽象工厂方法比工厂方法在抽象工厂中添加了更多的产品声明方法。


        角色:抽象工厂、具体工厂、抽象产品、具体产品。

        注:增加新的产品族符合开闭原则,但增加新的产品结构等级不符合,因为需要添加抽象工厂类中声明的方法。

 

        工厂的作用:与一个对象相同的职责通常有3种:对象本身的职责,创建对象的职责,使用对象的职责。根据单一职责,这3种职责应该分开,当然,具体情况具体分析,如果对象创建过程简单,则无需使用工厂模式。

 

1.2单例模式

         某一类只需要创建一个实例。首先,要将构造方法设为private,防止使用new创建对象。其次,要声明一个该类的private static对象。最后增加一个instance方法,用于返回该类的private static对象。

 

         饿汉式:在private static对象声明时就实例化。

 

         懒汉式:在需要使用时才实例化。在instance方法里面,先判断如果对象不为null,则直接返回该实例,如果为null,则用一个synchronized块,再次判断对象是否为null,若为null则实例化对象(防止实例化多个对象)。

 

         饿汉式无需考虑多线程,但是它在最开始就创建,会一直占用系统资源。懒汉式实现了延迟加载,但存在多线程时性能会受到影响。

 

         还有一种方法,静态内部类:

  1. class Singleton {  
  2.     private Singleton() {  
  3.     }  
  4.       
  5.     private static class HolderClass {  
  6.             private final static Singleton instance = new Singleton();  
  7.     }  
  8.       
  9.     public static Singleton getInstance() {  
  10.         return HolderClass.instance;  
  11.     }  
  12.       
  13.     public static void main(String args[]) {  
  14.         Singleton s1, s2;   
  15.             s1 = Singleton.getInstance();  
  16.         s2 = Singleton.getInstance();  
  17.         System.out.println(s1==s2);  
  18.     }  
  19. }  

转自:http://blog.csdn.net/lovelion/article/details/17517213

原创粉丝点击