8、桥接模式

桥接模式官方给出的概念:将实体与抽象分离,使它们可以独立变化。对应到代码可以理解为将对象实体和属性分离,两者独立变化,避免使用多继承。

举个例子:笔包含多种类型:铅笔、圆珠笔、钢笔等等,每种类型又对应不同的颜色,红色、蓝色、黑色。。

如果使用多继承实现,最顶层定义笔抽象类,下一层继承实现铅笔、圆珠笔、钢笔,再下一层继承实现红色铅笔、蓝色铅笔等等。。。这种处理方式需要创建大量的类,并且一旦增加或者删除某个属性,都需要创建或者删除大量的类

为了解决该问题,我们可以把:类型、颜色抽象出来,使两者独立变化,避免使用多继承,这种设计模式就叫桥接模式,桥接模式通常包含以下模块:

  • 抽象化:被抽象出的属性
  • 拓展抽象化:抽象属性具体实现值
  • 实现化:抽象类,需包含拓展抽象化才完整
  • 具体实现化:具体实体类

拿上面的例子来说,笔的类型和颜色都可以作为属性抽象化,拓展抽象化就是指钢笔、铅笔、红色、蓝色这些抽象属性的具体实现,实现化就是指还没有设置类型和颜色的笔,只有设计了笔和颜色,才是完整的对象,也就是具体实现化

下面我们看具体示例:

interface Implementor {
    void operationImpl();
}

class ImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        System.out.println("ImplementorA被访问");
    }
}

class ImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        System.out.println("ImplementorB被访问");
    }
}

abstract class Abstraction {

    protected Implementor implementor;

    protected Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }

    public abstract void operation();
}

class RefinedAbstraction extends Abstraction {

    protected RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }

    @Override
    public void operation() {
        implementor.operationImpl();
    }
}

实际上桥接模式在平时开发中经常被用到,比如当某个对象属性值包含多种枚举值时,都再采用桥接模式。使用时需要注意对象采用引用传递,修改一个引用的值,所有引用值都会修改,这里建议使用枚举,否则修改可能影响其它对象属性值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值