学习装饰模式
1、什么是装饰模式
1、在不修改原来的类的情况下,动态的拓展这个类的功能,比如,现在有一个人,想要调用的时候加上帅这个修饰,也比如一个图片,在创建之后加上一些水印,这些都是可以使用装饰模式来处理的,有点类似于代理模式,但是需要原对象传入
2、和代理模式的区别:装饰模式主要是传入一个对象,来对这个对象进行增强能力,即使怎么装饰,对象还是这个对象,不变。
代理模式是在自己的构造器中new一个新的对象,调用者不需要知道这个对象是谁,只需要知道事情做了就好了。
2、装饰模式实现
需求:一个类,现在只能打印人这么一句话,在不动这个类的情况下,打印在后面打印一个“帅”字
1、首先创建一个Person这个类,这个类只能简单的打印一句人
public class Person{
public void show() {
System.out.println("人");
}
}
2、添加一个装饰类,这个类就是核心,其实就是先打印Person里的show方法,再调用装饰类中的show方法,这里的Person是根据构造方法注入的,可以用其他方式,看个人情况。
//描述高的类
public class HeightDecorator{
private Person person;
//构造方法的方式加入 person这个类
public HeightDecorator(Person person) {
this.person = person;
//打印person里的show方法
person.show();
//再执行自己的show方法
show();
}
public void show() {
System.out.println("高");
}
}
3、那我们就开始调用这个装饰类了
public static void main(String[] args) {
//首先需要Person类可以注入
Person person = new Person();
//由于在内部已经调用了person的show和自己的show,所以直接new就会全部调用,
new HeightDecorator(person);
}