装饰模式

  大家好,我叫小赵,现任职藏剑山庄高级铸剑师,今天抽空跟大家唠唠嗑,希望能赚几个点击,赚几个关注。

  我们山庄每天都会出很多货,每把武器打造出来之后,会进行包装,因为大众化的口味总是需要各种各样的点缀,因此负责包装的部门也根据包装装饰品的不同分为不同的小组。

  咱们从最简单的开始,就打包就行,不用搞装饰。

类图:

剑:

public abstract class Sword {//打包public abstract void pack();//展示public abstract void show();
}

倚天剑:

public class YitianSword extends Sword {
    @Overridepublic void pack() {
        System.out.println("开始包装...");
    }

    @Overridepublic void show() {
        System.out.println("这是一把倚天剑!");
    }
}

主函数:

public static void main(String[] args){
        Sword yitian = new YitianSword();
        yitian.pack();
        yitian.show();
    }

输出:

开始包装...
这是一把倚天剑!

  接下来我们就要对倚天剑进行各式各样装饰,给倚天剑加个剑穗,再加个激光刻字,其实加什么都是小事,重要的是,要遵守开闭原则,对修改关闭,对扩展开放,在不修改原来代码的前提下完成新功能的增加,做到真正的拥抱变化。

类图:

装饰器抽象:

public abstract class Decorator extends Sword {//要装饰的目标private Sword sword;public Decorator(Sword sword) {this.sword = sword;
    }

    @Overridepublic void pack() {this.sword.pack();
    }

    @Overridepublic void show() {this.sword.show();
    }
}

装饰剑穗:

public class EarDecorator extends Decorator {public EarDecorator(Sword sword) {super(sword);
    }private void ear(){
        System.out.println("装剑穗...");
    }

    @Overridepublic void pack() {super.pack();this.ear();
    }
}

装饰激光刻字:

public class LetteringDecorator extends Decorator {public LetteringDecorator(Sword sword) {super(sword);
    }private void sheath(){
        System.out.println("激光刻字...");
    }

    @Overridepublic void pack() {super.pack();this.sheath();
    }
}

主函数:

public static void main(String[] args) {
        Sword yitianSword = new YitianSword();
        yitianSword = new LetteringDecorator(yitianSword);//装饰激光刻字yitianSword = new EarDecorator(yitianSword);//装饰剑穗yitianSword.pack();//开始装饰        yitianSword.show();
    }

输出:

开始包装...
激光刻字...
装剑穗...
这是一把倚天剑!

  这就是使用装饰模式进行的倚天剑包装,倚天剑的制造团队并不需要知道倚天剑的装饰品都有哪些,装饰类和被装饰类都可以独立发展,双方不会耦合。

  当需要给一个对象动态的附加功能的时候,比如有一批倚天剑需要激光刻字,有一批倚天剑不需要激光刻字,遇到这种场景,优先考虑装饰模式。

(0)

相关推荐

  • 跟宝剑有关的古诗词

    跟宝剑有关的古诗词

  • 什么样的爱才是持久的?

    今天是卡卡课堂陪伴大家的2769天 第一时间想获取卡卡老师的分享? 扫码入群快来和卡卡老师互动吧 占领一片土地,对于军事家来说,意味着战略,战术在一段时间的配合. 但如何守住这片土地,光靠武力是绝对无 ...

  • 【068】“棠溪杯”有奖征文徐冰作品

    七律·棠溪剑  徐冰(四川) 绝艺薪传淬火青, 湛卢高氏嫡真人. 棠溪巧铸魁星剑, 五福宏开利器名. 纵使先贤遗大巧, 仍需我辈与锋争. 中华代有匠才出, 试看倚天今又擎. 注: 湛卢:欧冶子所铸名剑 ...

  • 看电影 | 广西,浓雾深处

    一本有情怀的手机杂志 GUANGXI 广  西 ALL SET FROM FILM 往° 事´ 春日不食烟火饭 过山水之境犹见岭南 云载万里长空,河岸边迷雾重重 故乡月光清极,八桂万古如春 往事已成空 ...

  • 按照歪果仁这样翻译武侠作品,难怪金庸是无法获得诺贝尔奖

    图片发自简书App金庸小说编年史,从翻译来看,少了韵味,多了历史大背景,或许这就是文化的差异?最奇葩的是鸳鸯刀的翻译,什么鸭子的,不知道的是在讲烤鸭呢!

  • C#设计模式学习笔记:(8)装饰模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7723225.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第三个模式--装 ...

  • Decorator装饰模式

    >>返回<C#常用设计模式> 1. 简介 2. 示例 2.1. 框架中的例子 1. 简介 定义 动态地给一个对象增加一些附属的职责. 装饰装饰,自然的理解就是在原有物品的基础上 ...

  • 详解JAVA面向对象的设计模式 (七)、装饰模式

    装饰模式 Decorator 装饰模式比较简单,我就不单独写实现例子了.参考设计图去实现不是什么问题.建议可以写一写找找感觉. 在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修.相 ...

  • 设计模式(9) 装饰模式

    装饰模式 装饰模式的特点 动态撤销功能 装饰模式可以动态向一个现有的对象添加新的功能,同时又不改变其结构.就增加功能来说,使用继承的方式生成子类也可以达到目的,但随着扩展功能的不断增加,子类的数量会快 ...

  • 大话设计-装饰模式

    装饰模式的核心:被装饰对象(最原始),装饰对象(带有装饰功能的被装饰对象). 假设有一个被装饰对象叫"ConcreteComponent ",两个装饰对象叫"Concre ...

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

    举个栗子 问题描述 可以给人搭配嘻哈服或白领装的程序. 简单实现 代码 /** * 人类 * Created by callmeDevil on 2019/6/23. */ public class ...

  • 设计模式-装饰模式学习笔记

    装饰模式(结构型模式) 装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.[DP] 自己的理解:在不对原有类进行修改的情况下动态的对它进行 ...

  • 结构型模式:装饰模式

    简介 姓名 :装饰模式 英文名 :Decorator Pattern 价值观 :人靠衣装,类靠装饰 个人介绍 : Attach additional responsibilities to an ob ...

  • 通俗易懂系列 | 设计模式(二):装饰模式

    2018国庆黄金周来了,恰值国庆黄金周节假日,我想高速上一定车山车海,还好我选择了高铁,不然肯定需要寻找项目合作人或在高速上吃创业人士的炒饭炒面了. 国庆7天长假,天气又如此的好,所谓风和日丽,如此良 ...