Java设计模式-装饰模式

2019-10-26 20:44:01 浏览数 (2)

装饰模式:简单的来说就是动态的给一个对象增加额外的功能,就单纯的新增功能来说会比单一的给一个子类新增功能来的灵活,是跟代理模式中的静态代理模式和动态代理模式十分相近,但是静态代理会使得代码非常臃肿,维护性比较差,但是动态代理使用代理类,让代理类只是存在于内存当中运行,不需要产生具体的java文件,这样的模式会更加的优秀.接下来是本章的装饰模式

【本文使用lombok依赖,如果不想使用的可以直接使用setter方法】

1.统一的接口:
代码语言:javascript复制
public abstract class Component {

    /**
     * 基本的操作类
     */
    public abstract void opeartion();

}
2.其中的一个拓展实现类,作为一个拓展的功能类
代码语言:javascript复制
public class ConcreteComponentextends extends Component {

    @Override
    public void opeartion() {
        System.out.println("具体对象的操作");
    }

}
3.拓展类
代码语言:javascript复制
@Setter
public class Decoratorextends extends Component{

    private Componentcomponent;

    @Override
    public void opeartion() {
        if (component !=null){
            component.opeartion();
        }
    }

}
4.操作类A
代码语言:javascript复制
public class ConcreteDecoratorAextends extends Decorator {

    private StringaddedState;

    @Override
    public void opeartion() {

        super.opeartion();

        addedState ="New State";

        System.out.println("具体的装饰对象A的操作");

    }

}
5.操作类B
代码语言:javascript复制
public class ConcreteDecoratorBextends extends Decorator {

    @Override

    public void opeartion() {

        super.opeartion();

        AddedBehavior();

        System.out.println("具体装饰对象B的操作");

    }

    private void AddedBehavior(){

        System.out.println("装饰B独有的方法");

    }

}
6.测试用例
代码语言:javascript复制
public class Test {

    public static void main(String[] args) {

        ConcreteComponent component =new ConcreteComponent();

        ConcreteDecoratorA decoratorA =new ConcreteDecoratorA();

        ConcreteDecoratorB decoratorB =new ConcreteDecoratorB();

        decoratorA.setComponent(component);

        decoratorB.setComponent(decoratorA);

        decoratorB.opeartion();

    }

}

0 人点赞