zoukankan      html  css  js  c++  java
  • 设计模式——桥接模式

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

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

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

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

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

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

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

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

    形状类

    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

  • 相关阅读:
    【转载】用opencv中的CvEM做GMM的训练
    关于OpenCV做图像处理内存释放的一些问题
    关于C++ vector的拷贝
    VS2015创建的C++程序在Debug模式下不能调试
    OpenCV中IplImage和Mat间的相互转换
    视频资源下载方法[download video resources]
    关于win10安装VisualSVN遇到的一个问题及解决办法
    win7启动出现蓝屏STOP: 0X0000007B
    CentOS下挂在NTFS分区
    硬盘类型和Linux的分区
  • 原文地址:https://www.cnblogs.com/cwmizlp/p/9045366.html
Copyright © 2011-2022 走看看