温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java设计模式的装饰器模式怎么实现

发布时间:2022-04-22 09:14:51 来源:亿速云 阅读:183 作者:iii 栏目:开发技术

本文小编为大家详细介绍“Java设计模式的装饰器模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式的装饰器模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    什么是装饰器模式

    装饰器(Decorator)模式的定义: 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

    优点

    1、装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用

    2、通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果 3、装饰器模式完全遵守开闭原则

    缺点

    装饰器模式会增加许多子类,过度使用会增加程序得复杂性。

    知识点

    通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰器模式的目标。下面来分析其基本结构和实现方法。

    装饰器模式实现

    案例: 黑小虎抓住了七侠,还要把虹猫烤了

    抽象构件(Component)角色:七侠

    具体构件(ConcreteComponent)角色:虹猫

    抽象装饰(Decorator)角色:加料

    具体装饰(ConcreteDecorator)角色:加盐、加孜然。

    七侠

    七侠接口,声明一个烧烤抽象方法

    public interface Qi {
        void show();
    }

    虹猫

    虹猫类实现七侠接口,并且实现了烤虹猫的方法

    public class Hong implements Qi {
        @Override
        public void show() {
            System.out.println("烧烤一个虹猫");
        }
    }

    加料

    这就是一个抽象的装饰器,实现了七侠接口,声明一个七侠属性,用来调用七侠的烧烤方法

    public class JiaLiao implements Qi {
        private Qi qi;
        JiaLiao() {
        }
        JiaLiao(Qi component) {
            this.qi = component;
        }
        @Override
        public void show() {
            qi.show();
        }
    }

    加盐

    继承了抽象类,并且重写了烧烤方法,加了一个盐

    public class Yan extends JiaLiao {
        private Qi qi;
        Yan() {
        }
        Yan(Qi qi) {
            super(qi);
        }
        @Override
        public void show() {
            super.show();
            add();
        }
        public void add() {
            System.out.println("加盐");
        }
    }

    加孜然

    继承了抽象类,并且重写了烧烤方法,加了一个孜然

    public class ZiRan extends JiaLiao {
        private Qi qi;
        ZiRan() {
        }
        ZiRan(Qi qi) {
            super(qi);
        }
        @Override
        public void show() {
            super.show();
            add();
        }
        public void add() {
            System.out.println("加孜然");
        }
    }

    测试

    new一个虹猫,把它烤了。

    加点盐

    加点盐和孜然

    public class Demo {
        public static void main(String[] args) {
            Qi qi = new Hong();
            qi.show();
            System.out.println();
            Qi qi1 = new Yan(qi);
            qi1.show();
            System.out.println();
            Qi qi2 = new ZiRan(qi1);
            qi2.show();
        }
    }

    Java设计模式的装饰器模式怎么实现

    读到这里,这篇“Java设计模式的装饰器模式怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI