设计思想学习—桥接模式

桥接模式

一些话
从这篇文章开始要做一些改变,不在一起把定义和一些公式一起放上去然后在去分析,现在一步一步来吧!
感觉看了很多设计模式基本上都是只能知道一些定义构造,而不能理解所以看得越多,问题越多,我将会带着问题去实践去搜索然后再回来拜读。
设计模式我会过一遍、两遍、三遍直到我能理解,在这过程中肯定有很多问题错误,看到的大家也可以指出,大家可以相互交流,相互学习。
转载请说明出处,话不多说来开始桥接模式的学习吧!

给大家出一个问题:现在这里有蓝色的跑车、橘黄色的跑车、红色的卡车、黑色的卡车,给他们分类怎么分?
方案一
这里写图片描述

这个方案就是按照车的类型进行抽象然后在抽象,虽然也是成功分类了,但是如果想要加一辆黑色的跑车,那么就还需要在跑车类下面加一个黑色跑车,那么颜色就会有重复的,解决的办法就是方案二。

方案二
这里写图片描述

在方案二里面如果想要黑色的跑车只管组合就好了,而不用新增。

方案二的分类角度就是桥接模式,先来看看定义:

桥接模式(Bridge):桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。

将抽象部分和实现部分分离就是我们方案二的做法,在方案一中跑车、卡车都是抽象部分,而我们的蓝色跑车等都是直接实现了抽象,这样就不能独立的变化(就比如换个颜色)

《大话设计模式》里面的理解就是:实现系统可能有多个角度分类,每一种角度都可能变化,那么把这种多角度分类给分离出来让他们独立变化,减少他们之间耦合。

UML图
这里写图片描述

这是桥接模式的结构,下面来看我们例子代码实现

//抽象的车类
abstract class Car{
    Color color;
    public Car(Color color){
        this.color=color;
    }
    public abstract void getCar();
}
//被提炼的对象:卡车
class Truck extends Car{
    public Truck(Color color) {
        super(color);
    }
    public void getCar(){
        color.dye();
        System.out.println("卡车");
    }
}
//被提炼的对象:跑车
class SportsCar extends Car{
    public SportsCar(Color color) {
        super(color);
    }
    public void getCar(){
        color.dye();
        System.out.println("跑车");
    }
}
//颜色的实现接口
interface Color{
    void dye();
}
//具体颜色的实现,为了方便只举例两个颜色
class Red implements Color{
    public void dye(){
        System.out.print("红色的");
    }
}
class Blue implements Color{
    public void dye(){
        System.out.print("蓝色的");
    }
}
//实际我想要一辆蓝色的跑车
public class Client {
    public static void main(String[] args) {
        Car myCar=new SportsCar(new Blue());
        myCar.getCar();
    }
}

最后输出的也是蓝色跑车。

继上次的问题其实在今天之前,我写了几个设计模式的demo,感觉相似的地方太多太多,好像都可以替换。

整理好思路将在明天的文章中,专门拿出一篇来写相关的方面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值