简单的装饰模式,一句话概括“不动原代码的情况下,拓展新的功能”

学习装饰模式

         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);
    }

猜你喜欢

转载自blog.csdn.net/qq_38384460/article/details/111406956
今日推荐