桥接模式(java)

桥接模式

定义:将抽象部分与它的实现部分分离,是它们可以独立变化。

怎么理解呢?举个例子,不同的手机品牌商可能会有不同的软件的实现,比如安卓手机和果子手机的软件就有不同。那么我们可以有两种角度划分架构

image-20220327210723288image-20220327210827906

但是我们如果想要增加一个品牌和一个软件需要增加大量类去实现。实现系统有多角度的,每种角度的分类的都可能变化,那么我们可以把这些角度分离出来,让它们独立变化,减少它们之间的耦合。上面的例子可以演化成

image-20220327211531049

如此,增加一个品牌或者增加一个软件都只需要增加一个类。

由此,介绍设计模式的一个原则,合成/聚合复用原则——尽量使用合成/聚合,尽量不适用类继承

那么合成和聚合是什么呢?合成是一种强拥有的关系,体现严格的部分与整体的关系,部分和整体的生命周期一样,就像人和他的四肢。聚合的一种弱拥有的关系,体现的是A对象可以拥有B对象,但B对象不是A对象的一部分,如同程序员可能有你,但你未必是程序员的一部分。

桥接模式是抽象与实现相分离,抽象含有实现,实现未必是抽象的一部分,抽象使用的实现可以是多种是实现。这里的实现并非是实现类意义上的实现,而是一种“工具”上实现。下面是代码

/**
 * @author 州牧
 * @description 抽象类
 * @since 2022-03-27 20:39
 */
public class Abstraction {

    protected Implementor implementor;

    public void setImplementor(Implementor implementor){
        this.implementor = implementor;
    }

    public  void operation(){
        implementor.operation();
    }

}

public class RefinedAbstraction1 extends Abstraction{
    @Override
    public void operation() {
        implementor.operation();
    }
}

public class RefinedAbstraction2 extends Abstraction{
    @Override
    public void operation() {
        implementor.operation();
    }
}

/**
 * @author 州牧
 * @description 抽象包含的实现
 * @since 2022-03-27 20:36
 */
public abstract class Implementor {

    public abstract void operation();
}

/**
 * @author 州牧
 * @description
 * @since 2022-03-27 20:37
 */
public class DemoImplementor1 extends Implementor {

    @Override
    public void operation() {
        System.out.println("具体的操作一");
    }
}

public class DemoImplementor2 extends Implementor {
    @Override
    public void operation() {
        System.out.println("具体的操作二");
    }
}
/**
 * @author 州牧
 * @description
 * @since 2022-03-27 20:52
 */
public class Client {
    public static void main(String[] args) {

        System.out.println("抽象类一:");
        Abstraction rab1 = new RefinedAbstraction1();

        rab1.setImplementor(new DemoImplementor1());
        rab1.operation();

        System.out.println("抽象类二");
        Abstraction rab2 = new RefinedAbstraction2();

        rab2.setImplementor(new DemoImplementor2());
        rab2.operation();

        rab2.setImplementor(new DemoImplementor1());
        rab2.operation();

    }
}

/*

抽象类一:
具体的操作一
抽象类二
具体的操作二
具体的操作一

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值