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

案例:

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

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

代码实现:

品牌接口

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注册驱动时用到了桥接模式

Supongo que te gusta

Origin blog.csdn.net/qq_41890624/article/details/118273112
Recomendado
Clasificación