• 装饰模式


    装饰模式介绍:http://www.runoob.com/design-pattern/decorator-pattern.html

    允许向一个现有的对象添加新的功能,同时又不改变其结构。

    这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

    我们来看一个简单的案例:一个人穿衣服

    定义一个Person类

    public class Person {
        private String name;
        
        public Person() {
            super();
        }
        
        public Person(String name) {
            super();
            this.name = name;
        }
    
        public void show(){
            System.out.println("我是一个人");
        }
    }

    定义一个TShirts类,继承了Person类

    public class TShirts extends Person {
        private Person  person;
        
        public void decorate(Person  person){
            this.person = person;
        }
        public void show(){
            person.show();
            System.out.println("我穿大T恤");
        }
    }

    定义一个Trouser类,继承了Person类

    public class Trouser extends Person {
        private Person  person;
        
        public void decorate(Person  person){
            this.person = person;
        }
        
        public void show() {
            person.show();
            System.out.println("我穿裤子");
        }
    }

    测试代码

    public class Test {
        public static void main(String[] args) {
            Person p = new Person("张三");
            
            TShirts ts = new TShirts();
            Trouser tr = new Trouser();
            
            ts.decorate(p);
            tr.decorate(ts);
            tr.show();
        }
    }

    输出结果:

    我是一个人
    我穿大T恤
    我穿裤子

    以“一个人穿衣服”为例,Person类没有完成“穿衣服”功能,为了完成“穿T恤”的功能,我们或许会直接在Person类中修改代码,这样以后需要“穿裤子”、“戴帽子”都需要在Person类中修改。如果创建子类来完成“穿T恤”功能,那么“穿裤子”、“戴帽子”都需要创建子类。如果另一个玩具类Toy有类似的“穿裤子”、“戴帽子”功能,就需要更多的子类来处理。这样子类的数量就非常多了。

    一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。所以,装饰模式的应用背景就是在不想增加很多子类的情况下扩展类。

  • 相关阅读:
    其实说起来要国庆节回去,心里有点担心再最后买不到票
    现在快要中秋节,之后又是国庆节
    天气开始降温,今天会下雨
    昨天晚上控制家里的电脑,与家里人视频
    有时候手机打开微信或者其它应用真的是非常慢
    手机有时候卡的不行,还是自己照顾着使用吧
    这几天晚上都是再看小别离,还是有点意思
    函数初识
    Python文件操作
    Python字符编码
  • 原文地址:https://www.cnblogs.com/jwen1994/p/9995057.html
Copyright © 2020-2023  润新知