桥接模式

关于该设计模式要着重理解两个独立变化的维度。

 

 

 

 

 

 

 

 

 

 

 

   

 

 使用桥接模式实现的具体代码:

接口实现部分:

package com.bridge;

/**
 * 接口
 */
public interface Brand {
    void open();//开机
    void close();//关机
    void call();//打电话
}

  

package com.bridge;

/**
 * Vivo手机
 */
public class Vivo implements Brand {
    @Override
    public void open() {
        System.out.println("Vivo手机开机了");
    }

    @Override
    public void close() {
        System.out.println("Vivo手机关机了");
    }

    @Override
    public void call() {
        System.out.println("Vivo手机打电话");
    }
}

  

package com.bridge;

/**
 * 小米手机
 */
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("小米手机打电话");
    }
}

  

package com.bridge;

/**
 * HuaWei手机
 */
public class HuaWei implements Brand {
    @Override
    public void open() {
        System.out.println("HuaWei手机开机了");
    }

    @Override
    public void close() {
        System.out.println("HuaWei手机关机了");
    }

    @Override
    public void call() {
        System.out.println("HuaWei手机打电话");
    }
}

  

package com.bridge;

/**
 * 抽象类:手机
 */
public abstract class Phone {
    //组合品牌
    private Brand brand;
    //构造器
    public Phone(Brand brand) {
        this.brand = brand;
    }
    protected void open(){
        this.brand.open();
    }
    protected void close(){
        this.brand.close();
    }
    protected void call(){
        this.brand.call();
    }
}

  

抽象类部分

package com.bridge;

/**
 * 折叠式手机
 */
public class FoldedPhone extends Phone {
    //构造器
    //所以子类一定要创建一个带参数的构造方法去调用父类的带参数构造方法
    public FoldedPhone(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("折叠式手机");
    }
}

  

package com.bridge;

/**
 * 滑盖式手机
 */
public class SlidePhone extends Phone {
    //构造器
    //所以子类一定要创建一个带参数的构造方法去调用父类的带参数构造方法
    public SlidePhone(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("滑盖式手机");
    }
}

  

package com.bridge;

/**
 * 直立式手机
 */
public class UpRightPhone extends Phone {
    //构造器
    //所以子类一定要创建一个带参数的构造方法去调用父类的带参数构造方法
    public UpRightPhone(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("直立式手机");
    }
}

  

客户端调用

package com.bridge;

/**
 * 客户端进行调用
 */
public class Client {
    public static void main(String[] args) {
        //获取折叠式的小米手机
        Phone xiaomiFoldedPhone = new FoldedPhone(new XiaoMi());
        xiaomiFoldedPhone.open();
        xiaomiFoldedPhone.call();
        xiaomiFoldedPhone.close();

        System.out.println("=======================");
        //获取折叠式的Vivo手机
        Phone vivoFoldedPhone = new FoldedPhone(new Vivo());
        vivoFoldedPhone.open();
        vivoFoldedPhone.call();
        vivoFoldedPhone.close();

        System.out.println("=======================");
        //获取直立式的小米手机
        Phone xiaomiUpRightPhone = new UpRightPhone(new XiaoMi());
        xiaomiUpRightPhone.open();
        xiaomiUpRightPhone.call();
        xiaomiUpRightPhone.close();

        System.out.println("=======================");
        //获取直立式的Vivo手机
        Phone vivoUpRightPhone = new UpRightPhone(new Vivo());
        vivoUpRightPhone.open();
        vivoUpRightPhone.call();
        vivoUpRightPhone.close();

        System.out.println("=======================");
        //获取滑盖式的小米手机
        Phone xiaomiSlidePhone = new SlidePhone(new XiaoMi());
        xiaomiSlidePhone.open();
        xiaomiSlidePhone.call();
        xiaomiSlidePhone.close();

        System.out.println("=======================");
        //获取滑盖式的Vivo手机
        Phone vivoSlidePhone = new SlidePhone(new Vivo());
        vivoSlidePhone.open();
        vivoSlidePhone.call();
        vivoSlidePhone.close();

        System.out.println("=======================");
        //获取滑盖式的华为手机
        Phone huaweiSlidePhone = new SlidePhone(new HuaWei());
        huaweiSlidePhone.open();
        huaweiSlidePhone.call();
        huaweiSlidePhone.close();
        System.out.println("=======================");
        //获取折叠式的华为手机
        Phone huaweiFoldedPhone = new FoldedPhone(new HuaWei());
        huaweiFoldedPhone.open();
        huaweiFoldedPhone.call();
        huaweiFoldedPhone.close();
        System.out.println("=======================");
        //获取直立式的华为手机
        Phone huaweiUpRightPhone = new UpRightPhone(new HuaWei());
        huaweiUpRightPhone.open();
        huaweiUpRightPhone.call();
        huaweiUpRightPhone.close();
    }
}

  

运行结果

小米手机开机了
折叠式手机
小米手机打电话
折叠式手机
小米手机关机了
折叠式手机
=======================
Vivo手机开机了
折叠式手机
Vivo手机打电话
折叠式手机
Vivo手机关机了
折叠式手机
=======================
小米手机开机了
直立式手机
小米手机打电话
直立式手机
小米手机关机了
直立式手机
=======================
Vivo手机开机了
直立式手机
Vivo手机打电话
直立式手机
Vivo手机关机了
直立式手机
=======================
小米手机开机了
滑盖式手机
小米手机打电话
滑盖式手机
小米手机关机了
滑盖式手机
=======================
Vivo手机开机了
滑盖式手机
Vivo手机打电话
滑盖式手机
Vivo手机关机了
滑盖式手机
=======================
HuaWei手机开机了
滑盖式手机
HuaWei手机打电话
滑盖式手机
HuaWei手机关机了
滑盖式手机
=======================
HuaWei手机开机了
折叠式手机
HuaWei手机打电话
折叠式手机
HuaWei手机关机了
折叠式手机
=======================
HuaWei手机开机了
直立式手机
HuaWei手机打电话
直立式手机
HuaWei手机关机了
直立式手机

  

 

 

 

posted @ 2021-08-12 13:40  ~码铃薯~  阅读(32)  评论(0编辑  收藏  举报