【读书笔记】设计模式3章:创建型模式
来源:互联网 发布:整人剃发软件 编辑:程序博客网 时间:2024/05/29 18:03
我参照书中的例程重新构想了一些更加生动、易于理解的例子,希望大家喜欢。
代码可以通过以下链接进行浏览:
http://git.oschina.net/caipeichao/java-design-pattern
创建型模式能封装对象的创建过程,能提供对象的创建和管理职责。
- 单例模式
- 定义
- 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
- 分为饿汉式和懒汉式(Lazy Initialize)
- 懒汉式注意多线程同步(synchronize)
- 优点
- 减少内存开支(因为只有一个实例)
- 减少系统性能开销(因为只创建一次)
- 避免了资源的多重占用(比如日志文件)
- 可以设置全局访问点
- 缺点
- 无法创建子类
- 不便于测试(必须用mock方式进行测试,stub方式要自己写类,mock不需要)
- 与单一职责原则有冲突
- 使用场景
- 生成唯一序列号
- 整个项目需要一个共享访问点
- 创建一个对象要消耗很多资源
- 需要定义大量静态常量和静态方法
- 注意事项
- 单例分为有状态单例和无状态单例,如果是有状态单例,那么要注意分布式JVM下单例会出现多个实例,造成数据不同步,而无状态单例没有这个问题。在EJB RMI JINI中要注意这个问题
- 如果一个JVM有多个ClassLoader,那么单例也会出现多个实例的情况,此时也要避免使用有状态单例
- 单例不要实现clone方法,因为clone方法会造成多个实例
- 定义
- 工厂方法模式
- 定义
- 又叫虚拟构造函数
- 工厂模式将实际的创建工作推迟到子类中
- 分为简单工厂、工厂方法、抽象工厂
- 工厂方法只针对一个产品,抽象工厂针对一系列产品
- 角色:抽象工厂、具体工厂、抽象产品、具体产品
- 优点
- 良好的封装性,代码结构清晰
- 优秀的可扩展性
- 屏蔽产品类
- 能解耦合
- 使用场景
- 是new的替代品,有new的地方都可以用工厂方法代替
- 需要灵活的、可扩展的方式
- 可以使用在异构项目中(一个项目中出现多种编程语言)
- 工厂方法可以用在测试框架中(用于生成桩模块)
- 定义
- 抽象工厂模式
- 定义
- 其实就是在工厂方法模式中增加一个产品
- 角色:抽象工厂、具体工厂、抽象产品、具体产品
- 优点
- 产品族内的约束对使用者而言是看不到的
- 增加一个生产线非常容易
- 缺点
- 增加一个产品非常困难
- 使用场景
- 比如某个类需要在三个不同的平台上运行,可以通过抽象工厂屏蔽操作系统的细节
- 定义
- 建造者模式
- 定义
- 也叫做生成器模式
- 将一个复杂对象的创建过程与它的表示分离,这样相同的构建过程可以创建不同的表示
- 角色:抽象建造者、具体建造者、产品、导演者
- 优点
- 封装性
- 建造者比较独立,便于扩展
- 便于控制细节风险(建造过程可以逐步细化,而不影响其他模块)
- 使用场景
- 相同的方法,执行顺序不同,产生的结果也不同,可以用建造者模式
- 多个零件装配到一个对象中
- 产品类非常复杂
- 对象创建过程使用到了系统中的其他对象
- 定义
- 原型模式
- 定义
- 根据现有对象复制一个新的对象
- 角色:客户、抽象原型、具体原型
- Java中的Clonable就是原型模式
- 优点
- 性能优良
- 避免构造函数的约束
- 使用场景
- 资源优化场景
- 性能和安全性场景
- 定义
0 0
- 【读书笔记】设计模式3章:创建型模式
- 设计模式-创建型模式(读书笔记)
- GOF设计模式读书笔记:创建型
- 《设计模式》读书笔记之2 — 创建型模式
- 设计模式读书笔记(二)设计模式之创建模式
- 设计模式读书笔记(3)
- 设计模式读书笔记(3)
- 设计模式-创建型模式
- [设计模式]--创建型模式
- 设计模式--创建型模式
- 设计模式---创建型模式
- [设计模式] - 创建型模式
- 设计模式:创建型模式
- 设计模式:创建型模式
- 设计模式---创建型模式
- 设计模式---创建型模式
- 设计模式---创建型模式
- 【设计模式】创建型模式
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- C#面向对象基于winform的扫雷游戏和简单的算法改进
- ADO.NET连接数据库(例:窗体上有4个文本框,一个连接按钮,提示数据库连接)
- 定义JavaScript二维数组采用定义数组的数组来实现
- 【翻译】使用Modernizr探测HTML5/CSS3新特性
- 【读书笔记】设计模式3章:创建型模式
- AFNetworking速成教程
- Linux下修改主机名步骤
- EEPLAT学习
- 学C++时作的笔记
- JS正则表达式例子
- 【翻译】我钟爱的HTML5和CSS3在线工具
- Jtable 排序,清空的问题
- HTML5学习笔记简明版(1):HTML5介绍与语法