桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是用组合关系代替继承关系来实现的,从而降低了抽象和实现两个可变维度的耦合性,桥接吗模式包含以下主要角色
【案例】
现对不同手机类型的不同品牌实现看电影、玩游戏、打电话功能
传统方式解决手机问题的类图
使用桥接模式后的类图
public class BridgeTest {
public static void main(String[] args) {
Phone phone = new FoldedPhone(new HUAWEI());//折叠式的华为手机
phone.playGame();
phone.watchTV();
phone.call();
Phone phone1 = new DirectPhone(new XIAOMI());//直屏小米手机
phone1.playGame();
phone1.watchTV();
phone1.call();
}
}
interface Brand{ //实现化角色
void watchTV();
void playGame();
void call();
}
class XIAOMI implements Brand{ //具体实现化角色
public void watchTV() {System.out.println("小米手机看电视");}
public void playGame() {System.out.println("小米手机打游戏");}
public void call() {System.out.println("小米手机打电话");}
}
class HUAWEI implements Brand{ //具体实现化角色
public void watchTV() {System.out.println("华为手机看电视");}
public void playGame() {System.out.println("华为手机打游戏");}
public void call() {System.out.println("华为手机打电话");}
}
abstract class Phone{ //抽象化角色
private Brand brand;
public Phone(Brand brand) {this.brand = brand;}//构造器
protected void watchTV(){brand.watchTV();}
protected void playGame(){brand.playGame();}
protected void call(){brand.call();}
}
class FoldedPhone extends Phone{ //扩展抽象化角色
public FoldedPhone(Brand brand) {
super(brand);
}
public void watchTV() {
super.watchTV();
System.out.println("折叠屏样式手机");
}
public void playGame() {
super.playGame();
System.out.println("折叠屏样式手机");
}
public void call() {
super.call();
System.out.println("折叠屏样式手机");
}
}
class DirectPhone extends Phone{ //扩展抽象化角色
public DirectPhone(Brand brand) {
super(brand);
}
public void watchTV() {
super.watchTV();
System.out.println("直屏样式手机");
}
public void playGame() {
super.playGame();
System.out.println("直屏样式手机");
}
public void call() {
super.call();
System.out.println("直屏样式手机");
}
}
1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_60117382/article/details/123613400
内容来源于网络,如有侵权,请联系作者删除!