`
arcticfox9902
  • 浏览: 107210 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

创建型模式

 
阅读更多

1、工厂方法模式(Factory Method Pattern)

 

        所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。

        工厂方法模式定义了一个创建对象的接口(称为“工厂方法”),但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

 

2、抽象工厂模式(Abstract Factory Pattern)

        抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

        抽象工厂的方法经常以工厂方法的方式实现。抽象工厂的任务是创建一个具体产品,利用实现抽象工厂的子类来提供这些具体的做法。

 

3、单件模式(Singleton Pattern)

        单件模式确保一个类只有一个实例,并提供一个全局访问点。

        单件模式需要注意的是多线程的情况,为了确保单件模式能在多线程的情况下正常工作,有以下三个选择:

        a、把getInstance()变成同步方法。

public class Singleton {
        private static Singleton uniqueInstance;

        private Singleton() {}

        public static synchronized

 Singleton getInstance() {
                if(uniqueInstance == null) {
                        uniqueInstance = new Singleton();
                }
        }

        // other functions...
}

        同步会降低性能,而且只有第一次执行此方法时,才真正需要同步。也就是说,一旦设置好uniqueInstance变量,就不再需要同步这个方法了。

        b、使用“急切”创建实例,而不用延迟实例化的做法。

public class Singleton {
        private static Singleton uniqueInstance = new Singleton()
;

        private Singleton() {}

        public static Singleton getInstance() {
                return uniqueInstance;
        }

        // other functions...
} 

        利用这个做法,JVM在加载这个类的时候马上创建唯一的单件实例。

        c、用“双重检查锁”,在getInstance()中减少使用同步。

public class Singleton {
        private volatile
 static Singleton uniqueInstance;

        private Singleton() {}

        public static Singleton getInstance() {
                if(uniqueInstance == null) {  //检查实例,如果不存在,就进入同步区块
                        synchronized(Singleton.class)
 {                               
                                if(uniqueInstance == null) 
{  //进入区块后再检查一次,如果仍为null,才创建实例
                                        uniqueInstance = new Singleton();
                                }
                        }
                }
        }

        // other functions...
}

         volatile关键词确保当uniqueInstance变量被实例化成Singleton实例时,多个线程正确地处理uniqueInstance变量。只有第一次会进入同步区块,执行创建实例的代码,以后就不会进入同步区块了。

        注意:在1.4及更早版本的Java中,许多JVM对于volatile关键字的实现会导致双重检查加锁的失效,因为如果使用旧版的Java,就不要利用这个方法实现单件模式。

 

4、原型模式(Prototype Pattern)

        用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。

        关于原型模式的一些文章:http://tailsherry.iteye.com/blog/121580,http://www.cnblogs.com/kid-li/archive/2006/05/18/403559.html。

 

5、生成器模式(Builder Pattern)

        将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示。它使你可以改变一个产品的内部表示,它将构造代码和表示代码分开,它使你可以对构造过程进行更精细的控制。

        对生成器模式详细讲解的文章:http://www.cnblogs.com/kid-li/archive/2006/05/08/393529.html。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics