概念
- 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活;
 - 多加了一层,主要是增加了函数decorate(),客户端调用的时候可以不断的装饰,而不是每一个子类都要调用函数。
 
//    装配到一起
    public void decorate(Person component){
        this.component = component;
    }
	代码
目录结构
		
	
		Client
	
	package controller;
import service.Impl.BigTrouser;
import service.Impl.Tshirts;
import service.Person;
/**
 * @author SHshuo
 * @data 2021/10/16--8:41
 * 装饰模式、比子类更加灵活(通过一层一层的装饰)
 */
public class Client {
    public static void main(String[] args) {
        Person p = new Person("小菜");
        System.out.println("第一种装扮");
        BigTrouser trouser = new BigTrouser();
        Tshirts tshirts = new Tshirts();
        trouser.decorate(p);
        tshirts.decorate(trouser);
        tshirts.show();
    }
}
	
		抽象层
	
	package service;
/**
 * @author SHshuo
 * @data 2021/10/16--8:35
 */
public class Person {
    private String name;
    public Person(){}
    public Person(String name){
        this.name = name;
    }
    public void show(){
        System.out.println("某人装扮:" + name);
    }
}
多加一层
	package service;
/**
 * @author SHshuo
 * @data 2021/10/16--8:36
 */
public class Finery extends Person {
    protected Person component;
//    装配到一起
    public void decorate(Person component){
        this.component = component;
    }
    @Override
    public void show() {
        if(component != null){
            component.show();
        }
    }
}
	
		具体实现类
	
	package service.Impl;
import service.Finery;
/**
 * @author SHshuo
 * @data 2022/4/9--16:25
 */
public class Tshirts extends Finery {
    @Override
    public void show() {
        System.out.println("T恤衫");
        super.show();
    }
}
package service.Impl;
import service.Finery;
/**
 * @author SHshuo
 * @data 2022/4/9--16:25
 */
public class BigTrouser extends Finery {
    @Override
    public void show() {
        System.out.println("垮裤");
        super.show();
    }
}

京公网安备 11010502036488号