该复用支持封装。
该复用所需的依赖较少。
每一个新的类可将焦点集中在一个任务上。 该复用可在运行时间内动态进行,新对象可动态引用于成分对象类型相同的对象。
缺点:
通过这种复用建造的系统会有较多的对象需要管理。 为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。
七、 设计模式分类: 创建型模式: 工厂模式
简单工厂 工厂方法
抽象工厂(等级结构和产品族)
单例模式
原型模式(不要求代码)Cloneable(继承)?继承Clone()方法
序列化(不要求代码)?Serializable锁
结构化设计模式 组合模式
适配器模式 装饰者模式 桥接模式
代理模式(不写代码)
行为性设计模式 迭代器模式
访问者模式(重构代码)
状态模式 定义(电灯开关) 观察者模式 定义
简单工厂
Fruit接口
publicinterface Fruit {
publicvoid plant(); publicvoid grow(); publicvoidhavrest();}
Apple类
publicclass Apple implements Fruit {
publicvoid plant() { publicvoid grow() {
System.out.println(\苹果正在发芽\); } System.out.println(\苹果正在生长\); }
System.out.println(\苹果已经成熟\); }}
publicvoid havrest() {
Grape类
publicclass Grape implements Fruit {
publicvoid plant() { publicvoid grow() { publicvoidhavrest() {
System.out.println(\葡萄正在发芽\); } System.out.println(\葡萄正在生长\); }
System.out.println(\葡萄成熟\); }}
FruitFactory方法
publicclass FruitFactory {
publicstatic Fruit getFruit(String str){
Fruit fruit=null;
if(str.equals(\)){
returnnew Grape();
returnnew Apple();
}elseif( str.equals(\)){
}else
{ System.out.print(\没有你要的水果。\); }
return fruit; }}
主函数
publicclass Cliet { publicstaticvoid main(String[] args) { Fruit f=null;
f=FruitFactory.getFruit(\);
f.grow();
f.plant();
f.havrest(); }}
工厂方法
Fruit接口
publicinterface Fruit { publicvoid plant(); publicvoid grow();
publicvoidhavrest();}
Apple类
publicclass Apple implements Fruit { publicvoid plant() { System.out.println(\苹果正在发芽\); } publicvoid grow() {
System.out.println(\苹果正在生长\); }
publicvoid havrest() {
System.out.println(\苹果已经成熟\); Grape类
publicclass Grape implements Fruit { publicvoid plant() { System.out.println(\葡萄正在发芽\); } publicvoid grow() { System.out.println(\葡萄正在生长\); }
publicvoidhavrest() {
System.out.println(\葡萄成熟\); }}
FruitFactory接口
publicinterface FruitFactory { publicFruit getFruit();}
AppleFactory类
}}
publicclassAppleFactoryimplements FruitFactory{
public Fruit getFruit() {
returnnew Apple();
}}
GrapeFactory类
publicclass GrapeFactory implements FruitFactory {
public Fruit getFruit() {
returnnew Grape();
}}
主函数
publicclass Cliet {
publicstaticvoid main(String[] args) {
FruitFactory fruitfactory = null; fruitfactory=new AppleFactory(); fruitfactory.getFruit().plant(); fruitfactory.getFruit().grow(); fruitfactory.getFruit().havrest(); }}
抽象工厂
IBike接口
publicinterface IBicylce {
public void ignition(); public void startup();}
ISuv接口
publicinterface ISUV { void ignition(); void startup();}
SuperBike类
publicclass SuperBicycle implements IBicylce {
publicvoid ignition() {
System.out.println(\); } publicvoid startup() {
}}
System.out.println(\);
SuperSuv类
publicclass SuperSUV implements ISUV {
publicvoid ignition() { publicvoid startup() {
System.out.println(\);
}}
}
System.out.println(\);
SlowBike类
publicclass SlowBicycle implements IBicylce {
publicvoid ignition() {
System.out.println(\); System.out.println(\);
}}
}
publicvoid startup() {
SlowSuv类
publicclass SlowSUV implements ISUV {
publicvoid ignition() {
System.out.println(\); } System.out.println(\); }} publicvoid startup() {
ProductFactory抽象类
publicabstractclass ProductFactory { publicabstract ISUV getIsuv();
publicabstract IBicylce getIBicylce();
publicstatic ProductFactory getProductFactory(String type){
ProductFactory pf=null; if(type.equals(\)){
pf=new SlowFactory();
}
pf=new SuperFactory();
}elseif ( type.equals(\)) { return pf;}}
Super类
publicclass SuperFactory extends ProductFactory{
public ISUV getIsuv() {
returnnew SuperSUV(); returnnew SuperBicycle();
}}
} public IBicylce getIBicylce() {
Slow类