尚硅谷设计模式学习---[桥接模式(Bridge)]

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尚硅谷设计模式学习---[桥接模式(Bridge)]相关的知识,希望对你有一定的参考价值。

🚀🚀🚀尚硅谷传送门==>B站尚硅谷Java设计模式

❤❤❤感谢尚硅谷❤❤❤

👀 最近开始计划学习一下设计模式了,加油!!!



📢情景引入

现在市面上有各种各样的手机,种类不同,品牌也不同.

传统思路分析

如果说要扩展增加新的品牌手机,就需要为对应的种类手机下增加类;
或者扩展增加手机种类时,还要添加手机的品牌.

⚡桥接模式

桥接模式(Bridge)是指:将实现与抽象放在两个不同的类层次中

基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对各自的功能进行扩展.

Client类:模拟客户端

抽象类(Abstraction) :充当桥接类,聚合 Implementor 接口(此时就是调用与被调用的关系);
维护了 Implementor 接口 ; 以及Implementor的实现类ConcreteImplementorA,ConcreteImplementorC

Implementor 接口 行为实现类接口.

RefindedAbstraction 作为抽象类(Abstraction) 的具体实现类;

对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用.


接着回到这个手机的问题案例

手机品牌接口Brade

//手机品牌;
public interface Brade {
    //开机
    void open();
    //打电话;
    void call();
    //关机;
    void close();
}

手机品牌

//华为手机
public class HuaWei implements Brade{

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

    @Override
    public void call() {
        System.out.println("华为手机通话");
    }

    @Override
    public void close() {
        System.out.println("华为手机关机");
    }
}
//小米手机
public class XiaoMi implements Brade{
    @Override
    public void open() {
        System.out.println("小米手机开机");
    }

    @Override
    public void call() {
        System.out.println("小米手机通话");
    }

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

手机抽象种类AbstractPhone

//抽象类 手机
public abstract class AbstractPhone {
    //聚合手机品牌;
    private Brade brade;

    public AbstractPhone(Brade brade) {
        super();
        this.brade = brade;
    }

    //调用品牌的方法;
    protected void open(){
        this.brade.open();
    }

    protected void call(){
        this.brade.call();
    }

    protected void close(){
        this.brade.close();
    }
}

折叠式Folded

//折叠类手机
public class Folded extends AbstractPhone{
    public Folded(Brade brade) {
        super(brade);
    }

    public void open(){
        System.out.println("折叠手机");
        super.open();
    }

    public void call(){
        System.out.println("折叠手机");
        super.call();
    }

    public void  close(){
        System.out.println("折叠手机");
        super.close();
    }
}

滑盖式Silde

//滑盖类手机
public class Silde extends AbstractPhone{
    public Silde(Brade brade) {
        super(brade);
    }

    public void open(){
        System.out.println("滑盖手机");
        super.open();
    }

    public void call(){
        System.out.println("滑盖手机");
        super.call();
    }

    public void  close(){
        System.out.println("滑盖手机");
        super.close();
    }
}

模拟客户端Client

//模拟客户端
public class Client {
    public static void main(String[] args) {

        //选择折叠式华为手机操作
        AbstractPhone abstractPhone=new Folded(new HuaWei());
        abstractPhone.open();
        abstractPhone.call();

        System.out.println("<------------------------------->");

        //使用滑盖式小米手机操作;
        AbstractPhone abstractPhone1=new Folded(new XiaoMi());
        abstractPhone1.call();
        abstractPhone1.close();

    }
}

测试执行

折叠手机
华为手机开机
折叠手机
华为手机通话
<------------------------------->
折叠手机
小米手机通话
折叠手机
小米手机关机

桥接模式在JDBC中的应用

比如说加载驱动时

Class.forName("com.mysql.cj.jdbc.Driver");

进入Driver类;可注意到它实际上调用的是DriverManager的静态注册驱动方法

DriverManager.registerDriver(new Driver());

进入DriverManager类,其中有建立连接的getConnection 方法;该方法返回值类型为 Connection 接口

Connection 接口的底部关系接口.

Driver和Connection之间是通过DriverManager类进行桥连接的


以上是关于尚硅谷设计模式学习---[桥接模式(Bridge)]的主要内容,如果未能解决你的问题,请参考以下文章

尚硅谷设计模式学习---[装饰者模式]

尚硅谷设计模式学习---[单例模式]

尚硅谷设计模式学习(23)---[策略模式(strategy pattern)]

尚硅谷设计模式学习---[简单工厂模式,工厂方法模式,抽象工厂模式]

尚硅谷设计模式学习(17)---[迭代器模式(Iterator Pattern)]

尚硅谷设计模式学习(11)---[外观模式(Facade)]