设计模式总结之创建型
来源:互联网 发布:发达国家的大数据战略 编辑:程序博客网 时间:2024/05/02 05:01
概述
设计模式中用于创建类的模式有以下几种:
单例,工厂方法,抽象工厂,建造者和原型
1.单例模式(Singleton)
常用指数:★★★★★
定义
保证一个类仅有一个实例,并提供一个访问他的全局访问点
使用方法:
//双重锁的形式public class SingletonClass{ private static SingletonClass instance=null; public static SingletonClass getInstance() { if(instance==null) { synchronized(SingletonClass.class) { if(instance==null) instance=new SingletonClass(); } } return instance; } private SingletonClass(){ }}//静态调用public static class Singleton{ private static final Singleton instance = new Singleton(); private Singleton(){ //do something } public static Singleton getInstance(){ return instance; }}
2.工厂方法(Factory Method)
常用指数:★★★★
定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。
UML
优点
把对象的创建集中在一个地方(工厂中),在增加新的对象类型的时候,只需要增加新的工厂而无须改变已有代码;
例子
汽车工厂(Creator)–>大众汽车工厂,现代汽车工厂(ConcreteCreator)–>大众车,现代车
与单例模式的关系
一个具体的工厂通常是一个Singleton。
3.抽象工厂(Abstract Factory)
常用指数:★★★★
定义
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
UML
例子
优缺点
抽象工厂模式的优点
1分离接口和实现
客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。
2使切换产品族变得容易
因为一个具体的工厂实现代表的是一个产品族,比如上面例子的从现代汽车系列到大众汽车系列只需要切换一下具体工厂。
抽象工厂模式的缺点
1不太容易扩展新的产品
如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。
与工厂模式的关系
Abstract Factory类通常用工厂方法(Factory Method)实现,
4.建造者模式(Builder)
常用指数:★★★
定义
将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
UML
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
例子
汽车制造(Director)–>汽车制造步骤(builder)–>跑车制造步骤(ConcreteBuilder):装引擎,车胎等–>成产出跑车(Product)
与抽象工厂区别
主要的区别是Builder模式着重于一步步构造一个复杂对象。而Abstract Factory着重于多个系列的产品对象(简单的或是复杂的)。
原型模式(Prototype)
常用指数:★★
定义
用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
UML
例子
java里面的实现cloneable
春节祝福短信群发
- 设计模式总结之创建型模式
- 设计模式总结之创建型
- 设计模式总结 之 创建型
- JS设计模式之创建型设计模式总结
- 设计模式学习之创建型模式学习总结
- C#设计模式之——创建型模式总结
- 设计模式总结之二创建型模式
- 大话设计之模式总结——创建型模式
- 设计模式之创建类模式总结
- 设计模式---创建型设计模式总结
- 创建型设计模式总结
- 创建型设计模式总结
- 设计模式:创建型总结
- 创建型设计模式总结
- 【软考总结】设计模式之创建型
- 设计模式阶段性总结之对象创建
- 设计模式之创建型设计模式
- 设计模式学习总结-创建型模式
- ECMAscript5中的数组方法
- mysql buffer pool里的三种链表和三种page
- 将你的电脑变成 WIFI
- UITableView编辑状态下只显示排序图标
- APK反编译+回编译
- 设计模式总结之创建型
- 历届试题 剪格子 (DFS)
- 初学spring init-method="init" destroy-method="destroy" scope="prototype"
- Java与Matlab混合编程环境配置与实例分析
- 笔记一
- MFC 打开已经存在的EXCEL文件
- 完美串 (DP)
- 1、IOS编译报之:streamStatus only defined for abstract class
- EPOLL的简单使用