几个常用创建型设计模式总结
来源:互联网 发布: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则实例化对象(防止实例化多个对象)。
饿汉式无需考虑多线程,但是它在最开始就创建,会一直占用系统资源。懒汉式实现了延迟加载,但存在多线程时性能会受到影响。
还有一种方法,静态内部类:
- class Singleton {
- private Singleton() {
- }
- private static class HolderClass {
- private final static Singleton instance = new Singleton();
- }
- public static Singleton getInstance() {
- return HolderClass.instance;
- }
- public static void main(String args[]) {
- Singleton s1, s2;
- s1 = Singleton.getInstance();
- s2 = Singleton.getInstance();
- System.out.println(s1==s2);
- }
- }
转自:http://blog.csdn.net/lovelion/article/details/17517213
- 几个常用创建型设计模式总结
- 几个常用的结构型设计模式总结
- 设计模式---创建型设计模式总结
- 创建型设计模式总结
- 创建型设计模式总结
- 设计模式:创建型总结
- 创建型设计模式总结
- 常用的几个设计模式
- 设计模式学习总结-创建型模式
- 设计模式-创建型模式总结
- 设计模式总结—创建型模式
- 【设计模式基础】创建型模式 - 总结
- 设计模式大总结-创建型模式
- 设计模式总结之创建型模式
- 设计模式大总结-创建型模式
- 【大话设计模式】--创建型模式总结
- 设计模式(6) - 创建型模式总结
- 【设计模式】--创建型模式总结
- 【Linux】虚拟机vmware的安装
- Leetcode-Add Binary
- Asp.Net开发中未整理的资料
- python求数独全解
- BZOJ 4430 赌骆驼
- 几个常用创建型设计模式总结
- [Android Memory] 手动回收ImageVIew的图片资源
- MyBatis
- JAVA工程师面试题
- SQL学习—SELECT语句
- LinuxStudyNote(45)-管道符 | 的使用与解析、| 与 grep的使用
- HSL and HSV
- 前端之路——第一篇:认识前端简单的基础知识
- 最邻近规则分类(K-Nearest Neighbor)KNN算法