美文网首页
桥接模式-bridge

桥接模式-bridge

作者: HeJD | 来源:发表于2018-04-19 15:33 被阅读0次

将抽象部分与它的实现部分分离,使他们都可以独立地变化

这里写图片描述

效果及实现要点:

1.Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。
2.所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,便可以任意它们,从而获得不同路上的不同汽车。
3.Bridge模式有时候类似于多继承方案,但是多继承方案往往违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。
4.Bridge模式的应用一般在“两个非常强的变化维度”,有时候即使有两个变化的维度,但是某个方向的变化维度并不剧烈——换言之两个变化不会导致纵横交错的结果,并不一定要使用Bridge模式。

适用性:

在以下的情况下应当使用桥梁模式:
1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3.一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。
4.虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

总结:Bridge模式是一个非常有用的模式,也非常复杂,它很好的符合了开放-封闭原则和优先使用对象,而不是继承这两个面向对象原则。

代码

Main

public class Main {

    public static void main(String[] args) {
        Road hroad=new hightWay();
        Road croad=new contryRoad();
        
        Car c1=new BMW();
        Car c2=new Audi();
        
        hroad.setCar(c1);
        hroad.run();
        
        croad.setCar(c2);
        croad.run();
        
        People man=new Man();
        man.setRoad(hroad);
        man.run();
    }

}

abs:Car

public abstract class Car {
    public abstract void run();
}

abs:People

public abstract class People {

    protected Road road=null;
    public abstract void run();
    public abstract void setRoad(Road road);
}

abs:Road

public abstract class Road {
    protected Car car;
    public abstract void run();
    public abstract void setCar(Car car);
}

imp:Audi

public class Audi extends Car {

    @Override
    public void run() {
        System.out.println("Audi run");
    }

}

imp:BMW

public class BMW extends Car {

    @Override
    public void run() {
        System.out.println("BMW run");
    }

}

imp:contryRoad

public class contryRoad extends Road {

    @Override
    public void run() {
        System.out.println("contry road");
        car.run();
    }
    
    public void setCar(Car car){
        this.car=car;
    }

}

imp:hightWay

public class hightWay extends Road {

    @Override
    public void run() {
        System.out.println("hight way");
        this.car.run();
    }
    
    public void setCar(Car car){
        this.car=car;
    }

}

imp:Man

public class Man extends People {

    @Override
    public void run() {
        System.out.println("man run");
        super.road.run();
    }
    public void setRoad(Road road){
        super.road=road;
    }

}

相关文章

  • 设计模式解析—桥接设计模式

    桥接模式(Bridge Pattern)定义和使用场景 定义桥接模式(Bridge Pattern):将抽象部分...

  • docker的三种网络模式

    桥接模式:bridge

  • 桥接模式

    设计模式:桥接模式(Bridge)

  • 结构型-桥接(Bridge)

    桥接(Bridge) [TOC] 定义 桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模...

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 10-桥接模式

    桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】 处理多维度变化——桥接模式(...

  • 桥接模式

    桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。 桥接(Bridge)模式的优点是:由于...

  • 桥接模式-原理类图

    桥接模式(Bridge)-基本介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层...

  • 桥接模式(Bridge)

    定义它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如“圆形”、...

  • 桥接模式-bridge

    将抽象部分与它的实现部分分离,使他们都可以独立地变化 效果及实现要点: 适用性: 在以下的情况下应当使用桥梁模式:...

网友评论

      本文标题:桥接模式-bridge

      本文链接:https://www.haomeiwen.com/subject/ogxvcftx.html