java——桥接模式

桥接模式

一、前言

        桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。

二、桥接模式的用意

        桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。

        桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。这句话很短,但是第一次读到这句话的人很可能都会思考良久而不解其意。

三、桥梁模式的UML图

在这里插入图片描述

四、代码示例

1、手机的品牌:Brand

package com.gykalc.jdk8.bridge;

public interface Brand {
    /**
     * 不同品牌的手机也有开机功能
     */
    void open();

    /**
     * 不同品牌的手机也有关机功能
     */
    void close();

    /**
     * 不同品牌的手机也有显示功能
     */
    void show();
}

2、抽象手机类:Phone

package com.gykalc.jdk8.bridge;

public abstract class Phone {
    // 手机可以有不同的品牌
    private Brand brand;

    public Brand getBrand() {
        return brand;
    }

    public void setBrand(Brand brand) {
        this.brand = brand;
    }

    public Phone(Brand brand) {
        this.brand = brand;
    }
    /**
     * 开机
     */
    public abstract void open();

    /**
     * 关机
     */
    public abstract void close();

    /**
     * 显示画面
     */
    public abstract void show();
}

3、品牌实现类:XiaoMi和HuaWei

package com.gykalc.jdk8.bridge;

public class XiaoMi implements Brand {
    @Override
    public void open() {
        System.out.println("小米手机开机...");
    }

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

    @Override
    public void show() {
        System.out.println("小米手机显示画面...");
    }
}
class HuaWei implements Brand {
    @Override
    public void open() {
        System.out.println("华为手机开机...");
    }

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

    @Override
    public void show() {
        System.out.println("华为手机显示画面...");
    }
}

4、具体手机类:翻盖手机和智能手机——》(FlipPhone和SmartPhone)

package com.gykalc.jdk8.bridge;


/**
 * 翻盖手机
 */
public class FlipPhone extends Phone {

    public FlipPhone(Brand brand) {
        super(brand);
    }

    @Override
    public void open() {
        this.getBrand().open();
        System.out.println("翻盖手机开机...");
    }

    @Override
    public void close() {
        this.getBrand().close();
        System.out.println("翻盖手机关机...");
    }

    @Override
    public void show() {
        this.getBrand().show();
        System.out.println("翻盖手机显示画面...");
    }
}
/**
 * 智能手机
 */
class SmartPhone extends Phone{

    public SmartPhone(Brand brand) {
        super(brand);
    }

    @Override
    public void open() {
        this.getBrand().open();
        System.out.println("智能手机开机...");
    }

    @Override
    public void close() {
        this.getBrand().close();
        System.out.println("智能手机关机...");
    }

    @Override
    public void show() {
        this.getBrand().show();
        System.out.println("智能手机显示画面...");
    }
}

5、测试调用类:Client

package com.gykalc.jdk8.bridge;

public class Client {
    public static void main(String[] args) {
        FlipPhone flipPhone = new FlipPhone(new XiaoMi());
        flipPhone.open();
        flipPhone.close();
        flipPhone.show();
        System.out.println("----------------------------------");
        FlipPhone flipPhone1 = new FlipPhone(new HuaWei());
        flipPhone1.open();
        flipPhone1.close();
        flipPhone1.show();
        System.out.println("------------------------------------");
        SmartPhone smartPhone = new SmartPhone(new HuaWei());
        smartPhone.open();
        smartPhone.close();
        smartPhone.open();
        System.out.println("----------------------------------------");
        SmartPhone smartPhone1 = new SmartPhone(new XiaoMi());
        smartPhone1.open();
        smartPhone1.close();
        smartPhone1.show();
    }
}

五、总结

  • 分离抽象和实现部分
            桥梁模式分离了抽象部分和实现部分,从而极大地提供了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。

  • 更好的扩展性
            桥梁模式使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值