美文网首页
【黑马程序员济南中心】装饰者设计模式

【黑马程序员济南中心】装饰者设计模式

作者: b06ee9db5ac0 | 来源:发表于2018-04-28 10:03 被阅读0次

    前言:

           什么是装饰者模式:

                         在不改变原类和继承的情况下动态的扩展对象的功能.通过包装一个对象(类)来实现一个新的具有原来对象相同接口的对象(类).

    装饰者模式的特点:

    1.    在不改变原有对象的原本的结构上进行功能的添加.

    2.    装饰对象和原对象都实现了相同的接口.可以使用于原有对象的方式使用装饰对象.

    3.    装饰对象中包含原有对象.即装饰对象是真的的原始对象经过包装之后的对象.

    使用环境:

    1.    在不影响其他对象的情况下.以动态.透明的方式给单个对象题添加职责.

    2.    处理那些可以撤销的职责.

    3.    当不您呢个采用生成子类的方法进行扩充的时.一种情况是可能大量独立的扩展.为支持每一种扩展将产生大量的之类.使得之类的数量呈爆炸性增长.另一中情况是因为定义的类被隐藏.或是不能用于生成子类.

    参与者:

    1.    被装饰的对象基类.

    2.    被装饰的对象.

    3.    装饰者抽象类

    4.    具体的装饰者

    代码:

    // 基类 接口或者是抽象类  会被 被原始对象或是装饰对象继承或是实现

    public interface Person {

        void eat();

    }

    // 原始对象  实现基类的接口

    public class Man implements Person {

        public void eat() {

            System.out.println("男人在吃");

        }

    }

    // 装饰者的抽象类 实现基类接口

    public abstract class Decorator implements Person {

        protected Person person;

        public void setPerson(Person person) {

            this.person = person;

        }

        public void eat() {

            person.eat();

        }

    }

    //装饰者 继承装饰者的抽象类.而抽象类实现了基类接口那么 此类中也相当于继承了 基类中的方法

    public class ManDecoratorA extends Decorator {

        public void eat() {

            super.eat();

            reEat();

            System.out.println("ManDecoratorA类");

        }

        public void reEat() {

            System.out.println("再吃一顿饭");

        }

    }

    public class extends Decorator {

        public void eat() {

            super.eat();

            System.out.println("===============");

            System.out.println("ManDecoratorB类");

        }

    }

    // 测试类

    public class Test {

        public static void main(String[] args) {

            Man man = new Man();

            ManDecoratorA md1 = new ManDecoratorA();

            ManDecoratorB md2 = new ManDecoratorB();

            md1.setPerson(man);

            md2.setPerson(md1);

            md2.eat();

        }

    }

    总结: 动态的将功能附加到对象上.想要扩展功能.装饰者是有别于继承的另一种选择.

    相关文章

      网友评论

          本文标题:【黑马程序员济南中心】装饰者设计模式

          本文链接:https://www.haomeiwen.com/subject/tbgwlftx.html