【编程素质】设计模式-桥接模式

来源:互联网 发布:运营商认证数据不正确 编辑:程序博客网 时间:2024/06/08 07:42

1,概念

桥接模式(Bridge Pattern):

将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。

2,场景

①需要跨越多个平台的图形和窗口系统上。
②需要不同的方式改变接口和实现。

3,demo

1)汽车

①需求

对于汽车有不同的类型,它们所行驶的环境(高速、公路)也在变化。在系统中如何适应这两方面的变化?

②传统做法

通过多次继承实现。
这里写图片描述
遵循了开放-封闭原则的同时,违背了类的单一职责,即一个类只有一个引起它变化的原因。
因为继承太多,难于维护,可扩展性差,重复代码也很多。

③桥接模式

这里写图片描述

package bridge_pattern;public class Main {    public static void main(String[] args){        AbstractRoad roadSpeedWay = new SpeedWay();        roadSpeedWay.setCar(new Car());        roadSpeedWay.Run();        System.out.println("==============");        AbstractRoad roadStreet = new Street();        roadStreet.setCar(new Bus());        roadStreet.Run();    }}
package bridge_pattern;//抽象汽车类public abstract class AbstractCar {    public abstract void Run(); }
package bridge_pattern;public class Car extends AbstractCar{    @Override    public void Run() {        System.out.println("小汽车在");    }}
package bridge_pattern;public class Bus extends AbstractCar{    @Override    public void Run() {        System.out.println("公共汽车在");    }}
package bridge_pattern;public abstract class AbstractRoad {    private AbstractCar car;    public void setCar(AbstractCar car){        this.car = car;        car.Run();    }    public abstract void Run();}
package bridge_pattern;public class SpeedWay extends AbstractRoad{    @Override    public void Run() {        System.out.println("高速公路");    }}
package bridge_pattern;public class Street extends AbstractRoad{    @Override    public void Run() {        System.out.println("市区街道");    }}

4,优缺点

优:
①将实现和界面解耦。使抽象喝实现可以沿着各自的维度来变化。
②抽象和实现可以独立扩展。
③对于“具体的抽象类”所做的改变,不会影响到客户。
缺:
增加了复杂度。

0 0