- N +

设计模式之桥接模式

设计模式之桥接模式原标题:设计模式之桥接模式

导读:

什么是桥接模式?  这个模式使用的并不多,但是思想确实很普遍。就是要分离抽象部分与实现部分。  实现弱关联,即在运行时才产生依赖关系。  降低代码之间的耦合。桥接模式角色Abs...

文章目录 [+]

什么是桥接模式

  这个模式使用的并不多,但是思想确实很普遍。就是要分离抽象部分与实现部分。

  实现弱关联,即在运行时才产生依赖关系。

  降低代码之间的耦合。

桥接模式角色

Abstraction 抽象部分的基类,定义抽象部分的基础内容。

RefinedAbstraction 抽象部分的扩充,用于对基类的内容补充,添加特定场景的业务操作。

Implementor 实现部分的基类,定义实现部分的基本内容。

ConcreteImplementor 具体的实现类。

生活中的桥接模式

亚博体育官网人生赢家亚博体育PC版就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化?怎样实现才能应对这种变化呢?

使用场景

1 不希望在抽象和它的实现部分之间有一个固定的绑定关系

2 抽象部分以及实现部分都想通过子类生成一定的扩充内容

3 对一个抽象的实现部分的修改对客户不产生影响


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

代码讲解-生活中的设计模式

//抽象道路
public?abstract?interface?AbstractRoad?{
????
????
?????public?AbstractCar?car=null;
?????
?????public?void?setCar(AbstractCar?car);
?????
?????public?abstract?void?Run();

}


//高速公路
?class?SpeedWay?implements?AbstractRoad{

????@Override
????public?void?setCar(AbstractCar?car)?{
????????//?TODO?Auto-generated?method?stub
????????car=car;
????}

????@Override
????public?void?Run()?{
????????//?TODO?Auto-generated?method?stub
????????car.Run();
????????
????????System.out.println("--------行驶在高速公路上------------");
????}
?????
?}
?
//市区街道
?class?Street?implements?AbstractRoad
?{

????@Override
????public?void?setCar(AbstractCar?car)?{
????????//?TODO?Auto-generated?method?stub
????????car=car;
????}

????@Override
????public?void?Run()?{
????????//?TODO?Auto-generated?method?stub
????????car.Run();
????????
????????System.out.println("--------行驶在市区街道上------------");
????}
?????
?}


//抽象汽车
abstract?interface?AbstractCar{
????
????public?abstract?void?Run();

}

//小汽车
class??Car?implements?AbstractCar{

????@Override
????public?void?Run()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("------------小汽车---------");
????}
????
}

//公共汽车
class??Bus??implements?AbstractCar{

????@Override
????public?void?Run()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("------------公共汽车---------");
????}
????
}

客户端:

?public?static?void?main(String[]?args)?{
?????????
?????????AbstractRoad?Road1?=?new?SpeedWay();
?????????
?????????Road1.setCar(new?Car());
?????????
?????????Road1.Run();
?????????
?????????AbstractRoad?Road2=new?Street();
?????????
?????????Road2.setCar(new?Bus());
?????????
?????????Road2.Run();
????}

总结

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


本文标题:设计模式之桥接模式
本文链接:http://www.kyjszj.com/wdzl/21.html
作者授权:除特别说明外,本文由?开源技术之家?原创编译并授权?开源技术之家?刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共809人参与)参与讨论

    还没有评论,来说两句吧...