设计模式学习2-创建模式
来源:互联网 发布:下载facebook软件 编辑:程序博客网 时间:2024/06/06 10:48
创建模式包括:简单工厂模式,工厂方法模式,抽象工厂模式,单例模式,多例模式,建造模式,原始模型模式
简单工厂模式:负责将大量的有公共接口的类实例化,动态决定要将哪个类实例化。又称静态工厂方法模式。
有时候把工厂类与抽象类合并,由抽象类提供其子类的创建方法。
工厂方法对以做到对象的循环使用,对其所创建的对像进行登记。(使用私有静态属性--单例模式,或者集合存储--多例模式)
好处:1 可以使用字符串来创建对象
缺点:1当工厂需要创建的产品的层次多重而且复杂,那么工厂就成了“上帝类”那么当这个上帝类不能正常工作的时候,就要出问题了。
2简单工厂使用静态方法来创建产品,而静态方法不能被继承,所以无法形成基于继承的等级结构。
简单工厂与开闭原则:当加入一个新产品的时候,消费者无需修改,但是工厂的修改确实比较痛苦,他必须知道所有产品的创建细节。
针对抽象编程:结合工厂模式,如果将来有新的具体类加入,那么可以用新类替换原来交给客户的对象,而客户端不必修改。
工厂方法模式:创建工厂接口,将实际创建工作推迟到子类。(集合的iterator()方法就是工厂方法)
简单工厂模式的缺点--对开闭原则的支持不够,如果有新类加入,就需要修改工厂方法,将必要的逻辑加入到工厂类。
使用工厂方法模式:当出现一个新类的时候只需要增加一个相应的工厂,而不必对系统作出修改(有必要吗?有的时候修改并不麻烦啊?)
可以根据产品的等级结构,创建相应等级结构的工厂。
在使用了设计模式的时候,命名应该注意,要让人一看就知道使用了某种设计模式
工厂方法返回的类型应该是抽象类,而不是具体类
抽象工厂模式:针对多个产品等级结构,而工厂方法模式针对一个产品等级结构。
一个等级的工厂可以创建出不同产品等级结构中同一个产品族的所有的产品。
使用抽象工厂模式的时机:
1 一个系统的产品有多于一个的产品族(例如Oracle和DB2)而系统只消费其中某一族的产品(我们的Team和Share的service)
2 同一个产品族的产品是在一起使用的(Share Service的实现)
3 系统提供一个抽象的产品类库,客户端不依赖于产品的具体实现(Connector中的Service Extension)
如果需要增加产品族,只需要增加相应的具体工厂即可。但是如果要增加新的产品等级结构,就要在每个工厂里面增加新的方法。所以抽象工厂模式为产品族的扩展提供了开闭原则,但是不能适应产品等级结构。
在实现当中,具体的工厂类可以设计为单例模式!
之前,在简单工厂模式中提过可以用产品的抽象类充当具体产品的工厂。同样我们可以把抽象的工厂类,变成具体工厂的“工厂”(用静态方法返还具体工厂的实例,根据参量来决定应该返还哪个产品族的方法)
单例模式
饿汉式单例:public static Singleton singleton = new Singlieton();
懒汉式单例:public static Singleton singleton = null;
登记式单例:子类的构造器是public 的,这事登记式单例的一个缺点;父类必须存在才能构造子类,这是另外一个缺点。
多例模式
在实例不多的时候可以使用静态属性来存储,但是当数目比较多的时候可以用静态聚集来登记
建造模式
1产品拥有复杂的内部结构
2产品的某一个属性必须在另一个属性赋值之后才能被赋值
使用建造模式的好处:
使用建造模式,使得产品内部的零件可以单独的变化,客户端不必知道产品的内部细节。原型模式(这也能算设计模式?)
Object clone(): 1 x!=x.clone()
2 x.getClass()==x.clone().getClass()
3 x.equalse(x.clone())
浅复制:所有的属性都复制,所有对对象的引用全部指向原型的(从Object继承过来的clone()就是浅克隆)
深克隆:多有对象的引用也全都使用克隆。(再用深克隆的时候,要决定深克隆的深度,对间接复制的对象要克隆到多深)
- 设计模式学习2-创建模式
- 设计模式学习 - 创建型模式(1)
- 创建型模式-- 设计模式学习之一
- 设计模式学习总结-创建型模式
- 设计模式学习-创建型模式
- 创建型设计模式学习
- 设计模式学习-创建型
- 设计模式-创建模式
- 设计模式-创建模式
- 设计模式-创建模式
- 设计模式学习笔记之一(创建模式---工厂模式)
- 设计模式初探2-创建型模式
- JAVA设计模式-2-创建型模式
- 设计模式学习之创建型模式学习总结
- 设计模式 学习 2:
- 设计模式学习(2)
- 设计模式学习之创建工厂(一)
- java 设计模式-创建模式之工厂方法模式2
- 静态成员
- 代码规范
- 比较两个位图是否相同
- Delphi画个空心效果的文字
- MSN,QQ在线即时交谈网页代码
- 设计模式学习2-创建模式
- Delphi实现自动发贴和识别验证码
- xx.h和xx.c的奥妙
- 线程同步
- datatable中取值
- Delphi一位图水平镜像的代码
- Asp.net2.0页面的生命周期
- struts2 拦截器 interceptor
- ORACLE中一个UPDATE的操作流程