桥接模式

概述

如果要绘制矩形、圆形、椭圆、正方形,至少需要四个形状类,如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时有两种设计方案:

  • 第一种:为每一个形状提供一套各种颜色的版本,使用继承的方法,如果有四种形状,十二种颜色,则需要四十八个类。如果要增加新形状,则同时也要具备所有的颜色
  • 第二种:提供四个形状类、十二种颜色类,对形状和颜色进行组合,此时系统中的类是十六个。如需增加新的形状或颜色,只需再增加一个新的形状类或颜色类即可

采用方案二可以使系统中类的个数更少,且系统扩展更为方便


模式实例

现需提供大小两种型号的画笔,能绘制三种不同的颜色

颜色接口 Color

public interface Color {

    void bepaint(String penType, String name);
}

颜色实现类 Red

public class Red implements Color {

    @Override
    public void bepaint(String penType, String name) {
        System.out.println(penType + "红色的" + name);
    }
}

颜色实现类 Green

public class Green implements Color {

    @Override
    public void bepaint(String penType, String name) {
        System.out.println(penType + "绿色的" + name);
    }
}

颜色实现类 Blue

public class Blue implements Color {

    @Override
    public void bepaint(String penType, String name) {
        System.out.println(penType + "蓝色的" + name);
    }
}

画笔抽象类 Pen

public abstract class Pen {

    protected Color color;

    public void setColor(Color color) {
        this.color = color;
    }

    public abstract void draw(String name);
}

画笔实现类 BigPen

public class BigPen extends Pen {

    @Override
    public void draw(String name) {
        String penType = "大号毛笔绘制";
        this.color.bepaint(penType, name);
    }
}

画笔实现类 SmallPen

public class SmallPen extends Pen {

    @Override
    public void draw(String name) {
        String penType = "小号毛笔绘制";
        this.color.bepaint(penType, name);
    }
}
posted @ 2020-03-13 17:58  低吟不作语  阅读(456)  评论(0编辑  收藏  举报