博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式 装饰者设计模式
阅读量:6579 次
发布时间:2019-06-24

本文共 1311 字,大约阅读时间需要 4 分钟。

设计模式简介

什么是设计模式?

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

装饰者设计模式

使用场景:

给某个对象的功能进行扩展时,可以考虑使用装饰者设计模式。
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();    }}

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

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

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

 

 

 

 
 

 

转载于:https://www.cnblogs.com/xiaowangtongxue/p/10716499.html

你可能感兴趣的文章
c3p0
查看>>
redis cluster 集群搭建(增、删、改、查) :5.0.2
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
引号-下划线,连接多个变量
查看>>
游戏LOGO它应该长什么样?
查看>>
R80.10Checkup威胁分析——测试指南
查看>>
我的友情链接
查看>>
Office365 之分配、回收License工具
查看>>
盘点2012年应用交付网络 谈2013年网络技术趋势(2)
查看>>
36插件化开发_slots_radd
查看>>
38线程1-Thread-local-Timer
查看>>
CentOS 6.5使用 安装ansible
查看>>
为Exchange server 2013 申请多域名证书
查看>>
处理svn的 File '/aa' is out of date
查看>>
解决 Ubuntu 16.04 LTSSublime text3中文问题
查看>>
阿里云自定义监控tomcat进程数
查看>>
Python之Win字符编码详解
查看>>
为什么微服务一定要有网关?
查看>>
Linux练习题-文本处理工具sed
查看>>