装饰器模式展示
在学习设计模式的过程中,将自己对于设计模式的理解,以最简单,最白话的方式,分享给大家。个人觉得,对于设计模式的理解,需要将他从最抽象的理论里,真实的代入到实际的业务场景中,将会有最深刻的理解。所以文章最有对这个设计模式的使用的拓展,讲述了背后的意义。
-
场景一(先来假设一个最最最开始、最基本的模型基础)
-
英雄(Hero)这个类只有名字属性
那么这个类就很容易构造,在对外展示的时候,只需要调用display()方法,展示的就只有姓名了
public abstract class Hero { protected String name;//名字 Hero(String name) { this.name = name; } void display(){ System.out.println("My name is :" + name); }; }
- 在这个类下生成两个实体类,叫Annie(安妮)和Gaylen(盖伦)
-
Gaylen(盖伦)
public class Gaylen extends Hero {
Gaylen(){
super("Gaylen");
}
}
Annie(安妮)
public class Annie extends Hero {
Annie() {
super("Annie");
}
}
-
场景一的使用方法 非常的简单,简单的展示就好了
public static void main(String[] args) { Hero gaylen = new Gaylen(); Hero annie = new Annie(); gaylen.display(); annie.display(); }
输出结果也很容易
My name is :Gaylen My name is :Annie
[================================================================================]
接下来进入主题:
- 场景二: 产品经理叫我新增一个叫做皮肤的属性
如果这个时候这个英雄出皮肤了(也就是可以换不同的外观了),我们们应该怎么改这个结构呢?
思考角度:其实按照普通的做法,我们就会直接在Hero类上面,增加一个 Clothes属性,然后在display()方法里面,将Clothes给加进展示就好了。
新增的clothes的类属性如下:
public abstract class Clothes {
private String clothesName;//衣服名称
void display()