首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

创办型模式

2012-10-15 
创建型模式1、工厂方法模式(Factory Method Pattern)???????? 所有工厂模式都用来封装对象的创建。工厂方法

创建型模式

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。

?

?

热点排行