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

本文共 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

你可能感兴趣的文章
Linux中TLS
查看>>
51单片机和PC串口异步通信(续)
查看>>
android图片拖动缩放
查看>>
课后作业(2)
查看>>
while MyJob = '程序员' do --- 序
查看>>
SpringBoot thymeleaf模板版本,thymeleaf模板更换版本
查看>>
Python之旅.第六章.面向对象高级
查看>>
Apache与Nginx动静分离
查看>>
HTTP错误 401.3
查看>>
mongoDB使用笔记
查看>>
MATLAB:图像滤波,绝对值差(filter2,imabsdiff函数)
查看>>
ubuntu16.04安装mysql5.7.15
查看>>
js 提交数组到后端(C#)
查看>>
教育培训机构的信息化管理,要先从这四大业务场景做起
查看>>
[Mugeda HTML5技术教程之15]案例分析:制作移动教育课件
查看>>
揭开Socket编程的面纱
查看>>
一个结构体指针数组内存分配问题引发的思考
查看>>
主席树
查看>>
php-memcache
查看>>
Git理解笔记3
查看>>