设计模式笔记 -- 桥接模式

简介: 现在有一个手机接口,下面有三个抽象子类,分别是锁屏密码解锁的手机、指纹解锁的手机、人脸识别解锁的手机,每个抽象子类下又有多个品牌的手机,每个首相子类下面下面有三个子类,小米、华为、魅族。这时如果再出现一种瞳孔识别的手机,又得新增一个抽象类,抽象类下面三个子类。这是传统的解决方式,类太多 ,不好维护

案例:


现在有一个手机接口,下面有三个抽象子类,分别是锁屏密码解锁的手机、指纹解锁的手机、人脸识别解锁的手机,每个抽象子类下又有多个品牌的手机,每个首相子类下面下面有三个子类,小米、华为、魅族。这时如果再出现一种瞳孔识别的手机,又得新增一个抽象类,抽象类下面三个子类。这是传统的解决方式,类太多 ,不好维护


如果使用桥接模式,需要有一个品牌接口,下面三个子类小米、华为或者更多个品牌去实现这个品牌接口。还需要一个手机抽象类,下面有多个解锁类型的实现子类,其中聚合了品牌接口。


代码实现:


品牌接口

public interface Brand {
    void open();
    void close();
    void call();
}

品牌实现类

public class XiaoMi implements Brand {
    @Override
    public void open() {
        System.out.println("小米手机开机");
    }
    @Override
    public void close() {
        System.out.println("小米手机关机");
    }
    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }
}
public class HUAWEI implements Brand{
    @Override
    public void open() {
        System.out.println("华为手机开机");
    }
    @Override
    public void close() {
        System.out.println("华为手机关机");
    }
    @Override
    public void call() {
        System.out.println("华为手机打电话");
    }

}


手机抽象类


public abstract class Phone {
    //聚合一个品牌
    private Brand brand;
    public Phone(Brand brand){
        this.brand = brand;
    }
    protected void open(){
        brand.open();
    }
    protected void close(){
        brand.close();
    }
    protected void call(){
        brand.call();
    }
}


解锁类型子类


//锁屏密码解锁手机
public class PasswordLockScreenPhone extends Phone {
    public PasswordLockScreenPhone(Brand brand) {
        super(brand);
    }
    public void open(){
        super.open();
        System.out.println("锁屏密码手机");
    }
    public void close(){
        super.close();
        System.out.println("锁屏密码手机");
    }
    public void call(){
        super.call();
        System.out.println("锁屏密码手机");
    }
}
//指纹解锁手机
public class FingerScanPhone extends Phone {
    public FingerScanPhone(Brand brand) {
        super(brand);
    }
    public void open(){
        super.open();
        System.out.println("指纹解锁手机");
    }
    public void close(){
        super.close();
        System.out.println("指纹解锁手机");
    }
    public void call(){
        super.call();
        System.out.println("指纹解锁手机");
    }
}


测试调用


public class Client {
    public static void main(String[] args) {
        //小米锁屏密码手机
        Phone phone = new PasswordLockScreenPhone(new XiaoMi());
        phone.open();
        phone.close();
        phone.call();
        System.out.println("____________");
        //华为指纹解锁手机
        phone = new FingerScanPhone(new HUAWEI());
        phone.open();
        phone.close();
        phone.call();
    }
}


输出结果



这样一来,如果想新增一个手机品牌,只需要新增一个类去实现品牌接口就可以


如果想新增一个解锁类型的手机,只需要新增一个类去继承解锁类型抽象类即可


在jdbc中的DriverManager注册驱动时用到了桥接模式


相关文章
|
1月前
|
设计模式 Java API
Kotlin教程笔记(50) - 改良设计模式 - 工厂模式
Kotlin教程笔记(50) - 改良设计模式 - 工厂模式
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
29 2
|
7天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
13 2
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
1月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
27 3
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
43 2
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
39 1