9.设计模式-桥接模式

所谓桥接模式即为搭建中间关系的一种模式。举个网上比较流行的例子。如果我们要画一种画,需要大中小三种笔,红,蓝,黄,绿,紫五种颜色。那如果我是准备彩笔的话,我得准备多少支笔呢?我得准备3*5=15种吧。也就是大的需要准备五种颜色的笔,中的也要准备五种颜色的笔,小的也要准备五种颜色的笔。但如果我用毛笔+墨砚呢?那只需要3支笔,5种颜色的墨砚,我大的画完一种颜色,洗了,又涂抹另外一种颜色画。这样就只需要3+5=8个材料。造成第一种需要15中材料的原因是什么呢?就是因为笔本身和颜色本身耦合在一起了。这个在代码中就说明了类和其实现的功能耦合在一起了。那么为了解耦,我们只需要进行一个引用,就达到了拆分的目的。

定义一个color接口

public interface Color {
    void drawColor();
}

定义其实现

public class GreenColor implements Color {
    @Override
    public void drawColor() {
        System.out.println("我能画绿色");
    }
}
public class BlackColor implements Color {
    @Override
    public void drawColor() {
        System.out.println("我能画黑色");
    }
}
public class RedColor implements Color {
    @Override
    public void drawColor() {
        System.out.println("我能画红色.....");
    }
}

定义一个笔的抽象类

在抽象类里面引用颜色接口,供实现类不同的调用方法。

public abstract class Pen {
    public Color color;
    public void setColor(Color color){
        this.color=color;
    }
    public abstract void draw();
}
public class BigPen extends Pen {
    @Override
    public void draw() {
        System.out.println("我是一支大笔");
        color.drawColor();
    }
}
public class MidPen extends Pen {
    @Override
    public void draw() {
        System.out.println("我是一支中性笔");
        color.drawColor();
    }
}
public class SmallPen extends Pen{
    @Override
    public void draw() {
        System.out.println("我是一支小笔");
        color.drawColor();
    }
}
public class MainTest {
    public static void main(String[] args) {
        Pen pen = new BigPen();
        Color redColor  = new RedColor();
        Color blackColor = new BlackColor();
        pen.setColor(redColor);
        pen.draw();
        System.out.println("............");
        pen.setColor(blackColor);
        pen.draw();

    }
}
我是一支大笔
我能画红色.....
............
我是一支大笔
我能画黑色
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值