參考《敏捷軟件開發》與《Java與模式》經典案例。

Modem 介面:Dial()、Hangup()、Send()、Recv()HayesModem、USRoboticsModem、ErnieModemModem 介面程式設計DedUser 僅使用通訊功能
Modem(通訊)+ Dialer(撥號)兩介面DedicatedModem 僅實作 ModemDedUser 僅依賴 ModemDialer
DedicatedModem 繼承 ModemDial()/Hangup() 實作為空方法將「撥號」與「通訊」分離為兩個**實現化維度**,抽象化維度為「調製解調器類型」,實現化維度為「連線方式」。
// 抽象化:調製解調器核心功能
abstract class Modem
{
protected IConnection connection; // 實現化引用
public Modem(IConnection conn) => connection = conn;
public void Send(byte[] data) => connection.Send(data);
public byte[] Recv() => connection.Recv();
}
// 修正抽象化
class HayesModem : Modem { public HayesModem(IConnection c) : base(c) { } }
class DedicatedModem : Modem { public DedicatedModem(IConnection c) : base(c) { } }
// 實現化介面
interface IConnection
{
void Dial(string number);
void Hangup();
void Send(byte[] data);
byte[] Recv();
}
// 具體實現化
class PhoneConnection : IConnection { /* 撥號+通訊 */ }
class LeasedLineConnection : IConnection { /* 僅通訊,Dial/Hangup 空實作 */ }
Modem 抽象IConnection 實作Modem 子類