设计模式_装饰者模式

设计模式_装饰者模式

1. 概念定义

通过装饰者设计模式,可以帮助原来的主体内容新增、扩展、修改方法内容。

2. 类图关系

 

3.代码实现

3.1 代码业务解析。

背景信息:

XX报社每月都会出一个期刊,那么期刊的内容是由系统生成以及系统用户上传,因为期刊很多例如财经、天气等内容都是常规内容,排版的变化不大。而期刊当中有些版面需要自定义排版针对近期热点事件,这些页面让系统用户直接做好上传,比调整代码更加快能够生产整本期刊。

3.2 类图

在本次任务设计中,作者认为的期刊是一个整体的复合物(包含系统的、上传的),所以抽象出来一个公共接口(Magazine),然后系统生成的子期刊内容作为主体(MagazineTemplate),系统用户上传(CustomTemplate)的内容像是“装饰”一样,点缀主体。

3.3 具体代码

3.3.1 magazine

package com.lucas.pattern.decorate;
​
/**
 * 设计模式 - 装饰者模式 DEMO
 *
 * Magazine作为一个公共类型规定,规定好了客户上传期刊类,与我们系统的期刊类。
 * 系统期刊类:MagzineTemplate
 * 客户上传期刊类:CustomTemplate
 */
public abstract class Magazine {
​
    //期刊内容描述保存位置。
    protected String description;
​
    //获取期刊内容描述。
     String getDescription(){
         return this.description;
     };
​
     //设置描述内容
    abstract void setDescription(String description);
}
​

 

3.3.2 MagazineTemplate

package com.lucas.pattern.decorate;
/**
 * 系统生成的期刊
 */
public class MagazineTemplate extends Magazine{
​
    MagazineTemplate(){
        this.description = "[系统生成的期刊内容]";
    }
​
​
    @Override
    void setDescription(String description) {
        this.description += (description+",");
    }
}
​

3.3.3 CustomTemplate

package com.lucas.pattern.decorate;
​
/**
 * 客户提供想期刊内容
 */
public class CustomTemplate extends  Magazine{
​
    Magazine magazine ;
​
    CustomTemplate(Magazine magazine){
        this.description="[客户提供想期刊内容]";
        this.magazine = magazine;
    }
​
​
    @Override
    void setDescription(String description) {
        this.magazine.description += (this.description+description+",");
    }
}
​

3.3.4 测试内容类

package com.lucas.pattern.decorate;
​
public class PatternTest {
​
​
    public static void main(String[] args) {
        MagazineTemplate finalMaga = new MagazineTemplate();
        CustomTemplate customTemplate = new CustomTemplate(finalMaga);
        finalMaga.setDescription("天气预报内容");
        finalMaga.setDescription("财经内容");
        customTemplate.setDescription("黄子华复出开SHOW");
​
        System.out.println(finalMaga.getDescription());
    }
}

结果:

 

4.个人理解

在学习完《HEAD FRIST 设计模式》关于装饰者的模式之后,对此理解如下:

  • 装饰者需要基于主体,如果缺乏主体存在,装饰者的功能也没有用武之地。

  • 装饰者与主体 ‘抽象’成相同接口,主要其实不是说他们一定要有相同的方法,可以向上造型时触发,而是相当于一个标记,这两个都是属于同类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值