意图
将抽象部分与它的实现部分分离,使它们都可以独立的变化。
适用性
1.不希望抽象和实现间有固定的绑定关系
2.类的抽象以及它的实现都可以通过生成子类的方法加以扩充
3.对抽象的实现部分的修改应对客户端不参产生影响
4.在多个对象中共享实现
结构
实现
(这里所说的抽象层次和实现层次和面向对象的抽象和实现不同?把遥控器当作抽象,电视机当作实现是因为遥控器本身不会开关,只是命令电视机开关?这里抽象层次和实现层次的关系是聚合呀)
遥控器
public class RemoteControl { public TV tv; public void On() { tv.On(); } public void Off() { tv.Off(); } }
电视
public interface TV { void On(); void Off(); }
具体的电视
public class Sony:TV { public void On() { Console.WriteLine("SonyTV On."); } public void Off() { Console.WriteLine("SonyTV off"); } }
具体的遥控器
可扩展
public class ConcreteRemote:RemoteControl { public ConcreteRemote(TV tv) { this.tv = tv; } public void AutoOff(int ms) { Thread.Sleep(ms); tv.Off(); } }
客户
class PRogram { static void Main(string[] args) { TV sony = new Sony(); ConcreteRemote cr = new ConcreteRemote(sony); cr.On(); cr.AutoOff(5000); Console.ReadKey(); } }
运行结果
效果
1.分离接口及其实现部分
2.提高可扩充性
3.实现细节对客户透明