• java设计模式之桥接模式


    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。

    感觉听完上面的描述,没有几个人能够描述桥接模式到达怎么实现。

    据我个人的理解,桥接模式一般用于适用于以下情况,某个类的子类都多个维度的变化,如果都分别实现,可能会造成子类的爆炸。

    可以把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

    下面通过画笔这个例子,来解读一下桥接模式。

    photoshop很多人都用过,画笔既可以用来画圆,也可以画方,既可以画红色,也可以画蓝色。

    假如形状有10种,颜色有10种,分别实现就会有10*10=100个子类,关键是还不止形状和颜色两个维度,如果再加上线条粗细,背景色等维度就真的太繁琐了。

    我们将形状Shape和颜色Color解耦合,分别实现

    public abstract class Color {
        @Override
        public String toString() {
            return this.getClass().getSimpleName();
        }
    }
    
    
    public class BlueColor extends Color{
    
    }
    
    public class GreenColor extends Color{
    
    }
    
    public class RedColor extends Color{
    
    }

    在实现一个Shape类,持有一个颜色Color属性

    public abstract class Shape {
        private Color color;
    
        public void setColor(Color color) {
            this.color = color;
        }
    
        public Color getColor() {
            return color;
        }
    
        abstract void draw();
    }
    
    //正方形
    public class Square extends Shape{
        @Override
        void draw() {
            System.out.println(getColor()+" "+this.getClass().getSimpleName());
        }
    }
    
    //圆形
    public class Circle extends Shape{
        @Override
        void draw() {
            System.out.println(getColor()+" "+this.getClass().getSimpleName());
        }
    }
    
    //长方形
    public class Rectangle extends Shape{
        @Override
        void draw() {
            System.out.println(getColor()+" "+this.getClass().getSimpleName());
        }
    }

    这样就可以让形状和颜色分别实现

    public class PaintBoard {
        public static void main(String[] args) {
            BlueColor blueColor = new BlueColor();
            Square square = new Square();
            square.setColor(blueColor);
            square.draw();
        }
    }
    //输出
    BlueColor Square
  • 相关阅读:
    (转)用Ajax技术让IE Web Control Tree View实现大数据量读取
    您试图从目录中执行CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序
    oracle数据库中ORA28000: the account is locked问题
    C#动态生成html页面
    oracle 用户权限解释
    HCPC2013校赛训练赛 2
    ZOJ2770 Burn the Linked Camp 差分约束
    POJ2570 Fiber Network 状态压缩+floyd
    ZOJ3088 Easter Holidays 最短路
    POJ1364 King 差分约束
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15859232.html
Copyright © 2020-2023  润新知