前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大话设计模式笔记(四)——装饰模式

大话设计模式笔记(四)——装饰模式

作者头像
逝兮诚
发布2019-10-30 13:47:09
3010
发布2019-10-30 13:47:09
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/76546343

第六章装饰模式

装饰模式是动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

装饰模式UML

装饰模式的核心是对对象不断添加装饰的功能所使用的设计模式。

现有需求人和多种衣服,人需要自主搭配多种衣服,UML结构图如下

在上面的UML中,Decoiator存在Component对象属性,在构造器初始化。它的子类的wear方法会调用component.wear();这样实现Decoiator的子类去装饰Person类。

代码

Componet

代码语言:javascript
复制
public abstractclass Componet {

    public abstract void wear();
}

Person

代码语言:javascript
复制
public class Person extends Componet{
    private Stringname = "小菜";

    @Override
    public void wear() {
        System.out.println(name+ "穿衣");
    }
}

Decorator

代码语言:javascript
复制
public class Decorator extends Componet {

    public Componet componet;

    public Decorator(Componet componet) {
        this.componet = componet;
    }

    @Override
    public void wear() {
        componet.wear();
    }
}

JeansDecorator

代码语言:javascript
复制
public class JeansDecorator extends Decorator {

    public JeansDecorator(Componet componet) {
        super(componet);
    }

    @Override
    public void wear() {
        super.wear();
        System.out.println("穿牛仔裤");
    }
}

TieDecorator

代码语言:javascript
复制
public class TieDecorator extends Decorator {

    public TieDecorator(Componet componet) {
        super(componet);
    }

    @Override
    public void wear() {
        super.wear();
        System.out.println("打领带");
    }
}

TShirtDecorator

代码语言:javascript
复制
public class TShirtDecorator extends Decorator {

    public TShirtDecorator(Componet componet) {
        super(componet);
    }

    @Override
    public void wear() {
        super.wear();
        System.out.print("穿T恤");
    }
}

Test

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        Decorator tie = new TieDecorator(new Person());
        Decorator jeans = new JeansDecorator(tie);
        Decorator tshirt = new TShirtDecorator(jeans);

        tshirt.wear();
    }
}

打印

小菜穿衣

打领带

穿牛仔裤

穿T恤

总结

装饰模式是给核心功能添加新的功能,并能按照顺序执行。装饰模式将特定方法封装到类中,并让这个类包装它所需要的装饰类对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了。

装饰者模式是应用最普遍的设计模式之一。javaAPI中对装饰者模式的举例:Java I/O 库中 BufferedInputStream、DataInputStream、LineNumberInputStream、PushbackInputStream 等装饰者类对于 InputStream 的封装;JavaEE API 中的 ServletRequestWrapper、HttpServletRequestWrapper 对于 ServletRequest 的封装

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第六章装饰模式
    • 代码
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档