橋接模式的動機:
由于實際的需要,某個類具有兩個或兩個以上的維度變化,如果只是用繼承將無法實現這種需要,或者使得設計變得相當臃腫。橋接模式的作用:
橋接模式的做法是把變化部分抽象出來,使變化部分與主類分離開來,從而將多個維度的變化徹底分離。最后,提供一個管理類來組合不同維度上的變化,通過這種組合來滿足業務的需要。橋接模式的角色:
Implementor,實現類接口。
ConcreteImplementor,具體實現類。
Abstraction,抽象類。
RefinedAbstraction,擴充抽象類。
電視和遙控器就是一個典型例子。電視機和遙控器一樣都有多種種類,所以將它們中任何一個定義為一個具體類都不是好辦法。所以要采用兩層抽象。
Implementor,實現類接口。
public interface ITV { void turnOn(); void turnOff(); void changeChanel(int channel);}ConcreteImplementor,具體實現類。
public class SonyTV implements ITV { @Override public void turnOn() { System.out.Abstraction,抽象類。
public abstract class RemoteControl implements ITV { public ITV tv; public RemoteControl(ITV tv) { this.tv = tv; } @Override public void turnOn() { tv.turnOn(); } @Override public void turnOff() { tv.turnOff(); } @Override public void changeChanel(int channel) { tv.changeChanel(channel); }}ConcreteImplementor,擴充抽象類。
public class LogitechRemoteControl extends RemoteControl { public LogitechRemoteControl(ITV tv) { super(tv); } public void setChannelKeyboard(int channel) { tv.changeChanel(channel); System.out.println("Logitech use keyWord to set channel."); }}具體調用如下:
ITV tv = new SonyTV();LogitechRemoteControl lrc = new LogitechRemoteControl(tv);lrc.setChannelKeyboard(100);新聞熱點
疑難解答