举个例子,男孩送女孩礼物,礼物有两个维度,根据以下区分:
- 按样貌可以分为温暖型、狂野型
按具体礼物种类分为戒子、鲜花
如果男孩要送女孩温暖型的戒子,或者狂野型的鲜花,那应该怎么实现呢?
1、定义礼物类
public abstract class Gift {
protected GiftImpl impl;
}
2、定义具体礼物类
public abstract class GiftImpl {
}
3、温暖型礼物
public class WarmGift extends Gift {
public WarmGift(GiftImpl impl) {
this.impl = impl;
}
}
4、狂野型礼物
public class WildGift extends Gift {
public WildGift(GiftImpl impl) {
this.impl = impl;
}
}
5、花和戒子
public class Ring extends GiftImpl {
}
public class Flower extends GiftImpl {
}
6、如果要送实现温暖型的花
public class Boy {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void pursue(Girl mm) {
Gift g = new WarmGift(new Flower());
}
}
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。
每个维度都定义一个抽象父类
使用桥接模式场景,两个或多个维度的排列组合,可以使用桥接模式
聚合就是指一个类里面有另一个类的引用
比如此例子:
boy送礼物给girl,礼物有两个维度:1、温暖型、狂野型 2、具体型:花、戒指
如果使用继承,1型继承Gift, 2型继承1型,或者2型继承Gift,1型继承2型,那么将会产生相互耦合