意图0适用性1结构2实现3效果4
意图将抽象部分与它的实现部分分离,使它们都可以独立的变化。
适用性1.不希望抽象和实现间有固定的绑定关系
2.类的抽象以及它的实现都可以通过生成子类的方法加以扩充
3.对抽象的实现部分的修改应对客户端不参产生影响
4.在多个对象中共享实现
结构[flash=500,400]http://s1.knowsky.com/20160211/q23g4xkog1d49.png[/flash]
实现(这里所说的抽象层次和实现层次和面向对象的抽象和实现不同?把遥控器当作抽象,电视机当作实现是因为遥控器本身不会开关,只是命令电视机开关?这里抽象层次和实现层次的关系是聚合呀)
遥控器
publicclassRemoteControl{publicTV tv;publicvoidOn(){
tv.On();
}publicvoidOff(){
tv.Off();
}
}
电视
publicinterfaceTV{voidOn();voidOff();
}
具体的电视
publicclassSony:TV{publicvoidOn(){
Console.WriteLine("SonyTV On.");
}publicvoidOff(){
Console.WriteLine("SonyTV off");
}
}
具体的遥控器
可扩展
publicclassConcreteRemote:RemoteControl{publicConcreteRemote(TV tv){this.tv = tv;
}publicvoidAutoOff(intms){
Thread.Sleep(ms);
tv.Off();
}
}
客户
classPRogram{staticvoidMain(string[] args){
TV sony =newSony();
ConcreteRemote cr =newConcreteRemote(sony);
cr.On();
cr.AutoOff(5000);
Console.ReadKey();
}
}
运行结果
[flash=500,400]http://s1.knowsky.com/20160211/2byvp4pmypa49.png[/flash]
效果1.分离接口及其实现部分
2.提高可扩充性
3.实现细节对客户透明