美文网首页让前端飞前端开发笔记
设计模式-结构型模式-装饰模式

设计模式-结构型模式-装饰模式

作者: 小小小8021 | 来源:发表于2018-12-07 20:54 被阅读4次

设计模式-结构型模式-装饰模式

栗子

以成绩单需要家长签字为要求。


image

成绩单类图

// 抽象成绩单
public abstract class SchoolReport{
    // 成绩单你的成绩情况
    public abstract void report();
    // 成绩单要求家长签字
    public abstract void sign();
}

下面书写四年级成绩单

public class FouthGradeSchoolReport extends SchoolReport{
    // 自己的成绩单
    public void report(){
    }
    // 家长签名
    public void sign(String name){
    }
}

使用装饰器模式

使用装饰器模式,对成绩单进行装饰。
直接增加一个子类,重写report方法。

// 在成绩单下增加一个子类
public class SugarFouthGradeSchoolReport extends FouthGradeSchoolReport{
    // 对成绩进行美化
    private void reportHighScore(){
    }
    // 看完成绩单,再汇报排名
    private void reportSort(){
    }
    // 对父类重写,即report原先的成绩单进行重写
    public void report(){
        this.reportHighScore(); // 最高成绩
        // 显示成绩单
        super.report();
        // 再告诉排名
        this.reportSort();  
    }
}

最后场景类

public class Father{
    public static void main(String[] args){
        // 生成美化后的成绩单
        SchoolReport sr = new SugarFouthGradeSchoolReport();
        // 看成绩单
        sr.report();
        // 签名
        sr.sign("");
    }
}

继续改进

如果要装饰的太多,不可能无限的增加子类。
代码如下

public abstract class Decorator extends SchoolReport{
    // 要知道那个成绩单
    private SchoolReport sr;
    // 构造函数,传递成绩单
    public Decorator(SchoolReport sr){
        this.sr = sr;
    }
    // 装饰完成以后,需要有看到的需求
    public void report(){
        this.sr.report();
    }
    // 装饰完成后进行签名
    public void sign(String name){
        this.sr.sign(name);
    }
}

核心在于通过构造函数,将要装饰的对象传入。再重写方法。

public class HighScoreDecorator extends Decorator {
    // 构造函数
    public HighScoreDecorator(SchoolReport sr){
        super(sr);
    }
    // 对成绩修改
    private void reportHighScore(){
    }
    // 重写汇报方法,对进行进行汇报
    public void report(){
        this.reportHighScore();
        this.report();
    }
}

然后紧接着,对排名进行修饰

public class SortDecorator extends Decorator{
    // 构造函数
    public SortDecorator(SchoolReport sr){
        super(sr);
    }
    // 对排名装饰
    private void reportSort(){
        
    }
    // 输出成绩
    public void report(){
        super.report();
        this.reportSort();
    }
}

最后书写场景类

public class Father{
    public static void main(String[] args){
        // 定义成绩单
        SchooReport sr;
        // 获取原装成绩单
        sr = new FouthGradeSchoolReport();
        // 对成绩单进行装饰
        sr = new HighScoreDecorator(sr);
        sr = new SortDecorator(sr);
        // 最后,看成绩单
        sr.report();
        // 签名
        sr.sign("");
    }
}

应用

登录页面数据上报,使用装饰器,将登录层页面,上传到上报类中,进行装饰上统计代码,然后将统计数据上报。
动态改变函数参数,原先有一个正常的函数,通过装饰器,将正常的函数传入,装饰模式

应用ajax加token防止csrf攻击

表单验证,将表单验证的内容,写成一个类,然后需要哪个验证的选项,直接将表单验证传入即可,达到装饰器的目的,同时也达到了插件式的验证。

总结

核心在于装饰二字,将要装饰的对象,通过构造函数传入,然后再赋值,达到装饰的目的,然后再次调用即可。 wx.png

相关文章

  • JavaScript设计模式

    设计模式分类(23种设计模式) 创建型单例模式原型模式工厂模式抽象工厂模式建造者模式 结构型适配器模式装饰器模式代...

  • 常用的设计模式

    设计模式主要大概分成三类: 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式、装饰器模式、适配...

  • iOS常用设计模式总结(一)

    设计模式大概分成三类: 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式、装饰器模式、适配器模...

  • 设计模式(1)工厂模式

    设计模式有 23 种,按大类分的化可以分为三类 创建型(如:工厂模式、单例模式、原型模式等) 结构模式型(如:装饰...

  • 【设计模式】结构型设计模式汇总

    结构型设计模式汇总 结构型设计模式名称 结构型设计模式主要包括 7 大类: 代理模式 桥接模式 装饰器模式 适配器...

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 设计模式之装饰器模式

    也称装饰者模式、装饰器模式、Wrapper、Decorator。 装饰模式是一种结构型设计模式,允许你通过将对象放...

  • 设计模式分类汇总

    结构型 适配器模式 组合模式 桥接模式 代理模式 装饰者模式 门面模式 享元模式 行为型 责任链模式 命令模式 解...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • android常用设计模式

    26种设计模式 创建型设计模式[5] 单例模式,工厂模式,抽象工厂模式,建造模式,原型模式,[简单工厂模式] 结构...

网友评论

    本文标题:设计模式-结构型模式-装饰模式

    本文链接:https://www.haomeiwen.com/subject/ygbxhqtx.html