Java设计模式:装饰者模式(Decorator)
2021/10/4 20:42:53
本文主要是介绍Java设计模式:装饰者模式(Decorator),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
核心设计
- 装饰者类:
- 引用基础类
- 继承基础类(实现基础类的接口)
类图
- 基础类是 Shape (基础接口)
- 装饰类通过同时实现基础类接口和引用基础类达到可以继续扩展的目的
- 原本通过 Shape 类可以画 Circle 和 Rectangle
- 装饰者类通过引用 Shape 达到了原有的目的,通过 实现 Shape 接口保持自己也具有和 Shape 同样的身份(属性),从而我们在程序中调用 ShapeDecorator 及其子类对象的时候,就可以通过 Shape 类型来接受他们;而不用涉及新的类
- 下面的例子是一个牛肉面的例子:
- 面是基类接口,主要有 regularNoodle 和 BeefNoodle 这两种面
- NoodlesDecorator 既实现了 Noodles 接口,又引用了 Noodles 对象;即,他可以在 noodles 本身基础上进行扩展
- NoodlesDecorator 本身是个抽象类,这就保证了他可以通过子类生成多种多样的 decorator,比如加鸡蛋的面,就是 EggNoodlesDecorator,在加鸡蛋的面里面既可以产出 “加鸡蛋的牛肉面” 也可以产出 “加鸡蛋的普通面”
代码
package 设计模式.装饰者模式; public interface Noodles { float cost(); String description(); }
package 设计模式.装饰者模式; public class BeefNoodles implements Noodles { private final float price = 30; private String name = "beefNoodles"; @Override public float cost() { return price; } @Override public String description() { return name; } }
package 设计模式.装饰者模式; public class RegularNoodles implements Noodles{ private final float price = 10; private String name = "regularNoodles"; @Override public float cost() { return price; } @Override public String description() { return name; } }
package 设计模式.装饰者模式; public abstract class NoodlesDecorator implements Noodles { protected float price; protected Noodles noodles; @Override public abstract float cost(); @Override public abstract String description(); }
package 设计模式.装饰者模式; public class EggNoodlesDecorator extends NoodlesDecorator { private float eggPrice=3; private String name = "egg"; public EggNoodlesDecorator(Noodles noodles){ this.noodles = noodles; } @Override public float cost() { return eggPrice + noodles.cost(); } @Override public String description() { return name + noodles.description(); } }
package 设计模式.装饰者模式; import java.util.prefs.NodeChangeEvent; public class Demo { public static void main(String[] args) { Noodles beef = new BeefNoodles(); System.out.println(beef.description()); Noodles eggbeef = new EggNoodlesDecorator(buf); System.out.println(eggbeef.description()); } }
这篇关于Java设计模式:装饰者模式(Decorator)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行