• 设计模式 装饰者设计模式


    设计模式简介

    什么是设计模式?
    设计模式是可以重复利用的解决方案。软件开发的先驱或者前辈们将之前在开发中遇到的问题进行总结并给出了解决方案,后辈在遇到这些问题之后直接使用这些方案即可解决问题。比如盖高楼,都是先挖地基,然后再盖,如果先盖楼后挖地基,可能盖不了几层,楼就倒了。

    装饰者设计模式

    使用场景:
    给某个对象的功能进行扩展时,可以考虑使用装饰者设计模式。
    IO流这部分内容中,JDK的源码使用了大量的装饰者设计模式。比如BufferedReader可以对FileReader进行装饰。
    以去拉面馆吃拉面为例,一碗面做好后都会向里面加料装饰,所以先定义一个装饰拉面的接口,提供一个加料的方法

    /**
     * 定义一个给面加料的接口
     */
    public interface NoodleDecorate {
    
        void addThings();
    
    }

    创建一个拉面(Noodle)类实现NoodleDecorate接口

    public class Noodle implements NoodleDecorate {
        /**
         * 向面里加东西
         */
        @Override
        public void addThings() {
            System.out.println("加两片肉末");
            System.out.println("加一片萝卜");
            System.out.println("加三根香菜");
        }
    }

    普通的拉面做好之后,有人爱吃辣椒,想在拉面中添加辣椒,创建一个辣椒拉面(ChiliNoodle)类

    /**
     * 就是在不改变原有拉面的情况下,添加自己想要的调料
     */
    public class ChiliNoodle implements NoodleDecorate {
    
        private Noodle noodle;
    
        public ChiliNoodle(Noodle noodle) {
            this.noodle = noodle;
        }
    
        @Override
        public void addThings() {
            noodle.addThings();
            System.out.println("加三勺辣椒");
        }
    }

    写一个测试类

    public class NoodleTest {
        public static void main(String[] args) {
            /**
             * 获取加过辣椒的面
             */
            new ChiliNoodle(new Noodle()).addThings();
        }
    }

    这样就获得了加过料的拉面了,或者你不想要辣椒,想加鸡蛋的话,也可以自己加,而不用重新做一碗面

    (总结)装饰者设计模式的优点:

    不用修改被装饰对象的源码,装饰者与被装饰者耦合度不高。

  • 相关阅读:
    JSP
    结束程序-wpscloudsvr 程序没有响应,要返回Windows并检查程序状态,请单击“取消”,如果选择立即结束程序,你会失去
    解决Serlet API没导进导致的错误
    JDBC工具类
    数据库小项目
    数据库外键主键
    Mysql操作表时报错Table doesn't exist解决办法
    这大概是最细的YOLOX中的Mosaic And Mixup 实现源码分析了吧
    Sigcomm20 Hoyan 阅读笔记
    定时获取最新ssr服务器的方法
  • 原文地址:https://www.cnblogs.com/xiaowangtongxue/p/10716499.html
Copyright © 2020-2023  润新知