意圖
將抽象部分與它的實現部分分離,使它們都可以獨立的變化。
適用性
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.實現細節對客戶透明