设计模式/结构型设计模式
简述
用于把抽象化与实现化解藕,使二者可以独立变化
使用场景
当一个类存在两个独立变化的维度时,为了减少因继承结构带来的具体类数量,
可将变化的维度进行抽象化,再用关联方式将其联系起来
UML 图
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| @Getter public abstract class Color { private String name; public Color(String name) { this.name = name; } }
public class OrangeColor extends Color { public OrangeColor(String name) { super(name); } }
public class WhiteColor extends Color { public WhiteColor(String name) { super(name); } }
@Getter public abstract class OrangeCat extends Cat { private Color color; public OrangeCat(Color color) { this.color = color; } }
public class KittenCat extends OrangeCat {
public KittenCat(Color color) { super(color); } }
public class AdultCat extends OrangeCat {
public AdultCat(Color color) { super(color); } }
@Slf4j public class Client { public static void main(String[] args) { OrangeCat kittenCat1 = new KittenCat(new OrangeColor("橘色")); OrangeCat kittenCat2 = new KittenCat(new WhiteColor("橘白相间的")); OrangeCat adultCat = new AdultCat(new WhiteColor("橘白相间的")); log.debug("kittenCat1 颜色: " + kittenCat1.getColor().getName()); log.debug("kittenCat2 颜色: " + kittenCat2.getColor().getName()); log.debug("adultCat 颜色: " + adultCat.getColor().getName()); } }
|