设计模式——桥接模式

Posted 勤学才是王道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——桥接模式相关的知识,希望对你有一定的参考价值。

了解一下桥接模式的定义:

桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。

桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。

 

抽象部分与实现部分的分离并不是说抽行类和它的派生类分开,而是抽象类和派生类用来生成它们的对象

 

例如我们画图,形状并没有特意的规定,可以根据我们的想象随意画出,这是一个多变量,

接下来为形状上色,颜色也可以根据我们的爱好随意调和出,也是一个多变量。

 

再画出形状之后要求必须要上色,两者之间是相互依存的。

在存在两个多变量的情况下如何更更优化的写出代码,这时便要用到桥接模式。

 

形状类

 

1 public abstract class Shape {
2     Color color;
3 
4     public void setColor(Color color) {
5         this.color = color;
6     }
7     
8     public abstract void draw();
9 }

 

 

颜色属性是画图过程中的必须属性。

 

形状类职能确定画出的形状,而上色部分部分则是由颜色类进行操作。

 

实现一个正方形的形状类

1 public class Square extends Shape{
2 
3     public void draw() {
4         color.bepaint("正方形");
5     }
6 
7 }

 

 

接下来实现颜色类

颜色类

1 public interface Color {
2     public void bepaint(String shape);
3 }

 

实现白色颜色类

 

1 public class White implements Color{
2 
3     public void bepaint(String shape) {
4         System.out.println("白色的" + shape);
5     }
6 
7 }

 

颜色类只能提供颜色,对于形状无能为力。

但是要想画图,必须要有形状类的参与。

 

 

我们实现一下画图的功能

 

 1         //白色
 2         Color white = new White();
 3         //正方形
 4         Shape square = new Square();
 5         //白色的正方形
 6         square.setColor(white);
 7         square.draw();

 

 

如果只对于图形接口进行继承,在继承下的形状之下再次添加颜色状态,那样代码相当繁琐。

 

 

在这种情况下,这两个对象进行变化之后,维护的成本就会相当的低。

 

 

 

 

1、桥接模式实现了抽象化与实现化的脱耦。他们两个互相独立,不会影响到对方。

2、对于两个独立变化的维度,使用桥接模式再适合不过了。

3、对于“具体的抽象类”所做的改变,是不会影响到客户

 

 

学习于  https://www.cnblogs.com/chenssy/p/3317866.html

 

以上是关于设计模式——桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

案例分析:设计模式与代码的结构特性

23种设计模式之桥接模式代码实例

设计模式之桥接模式

PHP设计模式—桥接模式

桥接模式 C++ 代码编译错误

桥接模式-代码实现