设计模式-创建型模式

原文地址:http://blog.csdn.net/column/details/pattern.html?&page=1

创建型模式

  • 单例模式
  • 工厂方法模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式

单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

这里写图片描述

饿汉式单例

    public class Singleton {  
        private static Singleton singleton = new Singleton();  
        private Singleton(){}  
        public static Singleton getInstance(){  
            return singleton;  
        }  
    } 

懒汉式单例(线程安全)

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

工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

这里写图片描述

简单地说:具体对象由具体的对象工长来创建。


抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂模式是工厂方法模式的升级。区别在于抽象工厂模式提供一组相关对象生产的接口方法,而工厂方法提供一个对象生产的接口方法。

UML类图是一致的。

无需纠结使用的是抽象工厂模式还是工厂方法模式,主要目的都是用来解耦。


建造者模式

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

这里写图片描述

相对于工厂模式,建造者模式在最终调用者之间多了一个Director类。

Builder用来提供创建最终产品的各个零部件方法,Director用来确定组装各个零部件的顺序来产生最终的产品。具体Builder的实现持有一个最终产品的私有属性。

建造者模式和工厂模式非常相似,建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程。


原型模式

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

这里写图片描述

原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:

  • 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。
  • 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。

原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。

使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多。

在使用原型模式时,要注意深拷贝浅拷贝的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值