桥接模式
一些话
从这篇文章开始要做一些改变,不在一起把定义和一些公式一起放上去然后在去分析,现在一步一步来吧!
感觉看了很多设计模式基本上都是只能知道一些定义构造,而不能理解所以看得越多,问题越多,我将会带着问题去实践去搜索然后再回来拜读。
设计模式我会过一遍、两遍、三遍直到我能理解,在这过程中肯定有很多问题错误,看到的大家也可以指出,大家可以相互交流,相互学习。
转载请说明出处,话不多说来开始桥接模式的学习吧!
给大家出一个问题:现在这里有蓝色的跑车、橘黄色的跑车、红色的卡车、黑色的卡车,给他们分类怎么分?
方案一
这个方案就是按照车的类型进行抽象然后在抽象,虽然也是成功分类了,但是如果想要加一辆黑色的跑车,那么就还需要在跑车类下面加一个黑色跑车,那么颜色就会有重复的,解决的办法就是方案二。
方案二
在方案二里面如果想要黑色的跑车只管组合就好了,而不用新增。
方案二的分类角度就是桥接模式,先来看看定义:
桥接模式(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,感觉相似的地方太多太多,好像都可以替换。
整理好思路将在明天的文章中,专门拿出一篇来写相关的方面