前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-装饰模式

设计模式-装饰模式

作者头像
cwl_java
发布2019-10-26 20:46:01
4200
发布2019-10-26 20:46:01
举报
文章被收录于专栏:cwl_Javacwl_Java

装饰模式:简单的来说就是动态的给一个对象增加额外的功能,就单纯的新增功能来说会比单一的给一个子类新增功能来的灵活,是跟代理模式中的静态代理模式和动态代理模式十分相近,但是静态代理会使得代码非常臃肿,维护性比较差,但是动态代理使用代理类,让代理类只是存在于内存当中运行,不需要产生具体的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();
        }
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.统一的接口:
  • 2.其中的一个拓展实现类,作为一个拓展的功能类
  • 3.另一个拓展的功能类
  • 4.操作类A
  • 5.操作类B
  • 6.测试用例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档