设计模式-装饰模式

2019-10-26 20:46:01 浏览数 (1)

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

代码语言:javascript复制
【本文使用lombok依赖,如果不想使用的可以直接使用setter方法】
1.统一的接口:
代码语言:javascript复制
    public abstract class Component {
        /**
         * 基本的操作类
         */
        public abstract void opeartion();
    }
2.其中的一个拓展实现类,作为一个拓展的功能类
代码语言:javascript复制
    public class ConcreteComponent extends Component {
        @Override
        public void opeartion() {
            System.out.println("具体对象的操作");
        }
    }
3.另一个拓展的功能类
代码语言:javascript复制
    @Setter
    public class Decorator extends Component{
        private Componentcomponent;
        @Override
        public void opeartion() {
            if (component !=null){
                component.opeartion();
            }
        }
    }
4.操作类A
代码语言:javascript复制
    public class ConcreteDecoratorA extends Decorator {
        private StringaddedState;
        @Override
        public void opeartion() {
            super.opeartion();
            addedState ="New State";
            System.out.println("具体的装饰对象A的操作");
        }
    }
5.操作类B
代码语言:javascript复制
    public class ConcreteDecoratorB 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 人点赞