使用场景:桥接模式的核心意图就是将这些实现独立出来,让它们各自地变化。这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。
多用聚合,少用继承
1. 手机软件抽象类、通讯录类、游戏类
package com.hj.designPattern.structural.bridge;
public abstract class Software {
public abstract void softrun();
}
package com.hj.designPattern.structural.bridge;
public class GameSoft extends Software{
@Override
public void softrun() {
System.out.println("游戏软件运行");
}
}
package com.hj.designPattern.structural.bridge;
public class AddresSoft extends Software{
@Override
public void softrun() {
System.out.println("通讯录软件运行");
}
}
2. 手机品牌类、华为类、小米类
package com.hj.designPattern.structural.bridge;
public class PhoneBrand {
protected Software software;
PhoneBrand(Software software){
this.software = software;
}
public void run() {
software.softrun();
}
}
package com.hj.designPattern.structural.bridge;
public class Huawei extends PhoneBrand{
Huawei(Software software) {
super(software);
}
@Override
public void run() {
System.out.print("华为");
super.run();
}
}
package com.hj.designPattern.structural.bridge;
public class Xiaomi extends PhoneBrand{
Xiaomi(Software software) {
super(software);
}
public void run(){
System.out.print("小米");
super.run();
}
}
3. 测试类
package com.hj.designPattern.structural.bridge;
public class BridgeTest {
public static void main(String[] args) {
AddresSoft addresSoft = new AddresSoft();
GameSoft gameSoft = new GameSoft();
Huawei huaweiAddress = new Huawei(addresSoft);
huaweiAddress.run();
Huawei huaweiGame = new Huawei(gameSoft);
huaweiGame.run();
Xiaomi xiaomiAddress = new Xiaomi(addresSoft);
xiaomiAddress.run();
Xiaomi xiaomiGame = new Xiaomi(gameSoft);
xiaomiGame.run();
}
}