设计模式:桥接模式

参考
桥接模式(Bridge Pattern)-(最通俗易懂的案例)

桥接模式

通过使用封装、聚合及继承等行为让不同的类承担不同的职责。
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
简单而言就是对于每一种特点,抽象成一个类

角色

  • Client 类:桥接模式的调用者
  • 抽象类(Abstraction) :维护了 Implementor / 即它的实现类 ConcreteImplementorA…, 二者是聚合关系, Abstraction充当桥接类
  • RefinedAbstraction : 是 Abstraction 抽象类的子类
  • Implementor : 行为实现类的接口
  • ConcreteImplementorA /B :行为的具体实现类
    从 UML 图:这里的抽象类和接口是聚合的关系,是调用和被调用关系

UML

在这里插入图片描述

包结构

在这里插入图片描述

shape

抽象类
package 桥接模式.shape;

import 桥接模式.color.Color;

public abstract class Shape {
    protected Color color;
    protected String shape;
    public abstract String getShape();
    public abstract void setColor(Color color);
    public abstract Color getColor();
}
具体
package 桥接模式.shape;

import 桥接模式.color.Color;

public class Circle extends Shape{
    public Circle(){
        super.shape="圆形";
    }

    @Override
    public String getShape() {
        return super.shape;
    }

    @Override
    public void setColor(Color color) {
        super.color = color;
    }

    @Override
    public Color getColor() {
        return super.color;
    }
}
-----------------------------------------------------
package 桥接模式.shape;

import 桥接模式.color.Color;

public class Rectangle extends Shape{
    public Rectangle(){
        super.shape="长方形";
    }

    @Override
    public String getShape() {
        return super.shape;
    }

    @Override
    public void setColor(Color color) {
        super.color=color;
    }

    @Override
    public Color getColor() {
        return super.color;
    }
}
-----------------------------------------------------

color

接口
package 桥接模式.color;

public interface Color {
    String getColor();
}
实现类
package 桥接模式.color;

public class Green implements Color{
    private String color = "绿色";
    @Override
    public String getColor() {
        return this.color;
    }
}
----------------------------------------------------------
package 桥接模式.color;

public class Red implements Color{
    private String color = "红色";
    @Override
    public String getColor() {
        return this.color;
    }
}
----------------------------------------------------------

优点:

  • 实现抽象和实现的分离
  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统
  • 桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差,而且多继承结构中类的个数非常庞大,桥接模式是比多继承方案更好的解决方法

缺点:

  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
  • 桥接模式要求正确识别出系统中两个独立变化维度,因此其使用范围具有一定的局限性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值