当前位置: 首页 > news >正文

装饰者设计模式

package com.jmj.pattern.decorator;/*** 快餐类(抽象构建角色)*/
public abstract class FastFood {private float price;private String desc;public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public FastFood() {}public FastFood(float price, String desc) {this.price = price;this.desc = desc;}public abstract float cost();
}
package com.jmj.pattern.decorator;/*** 炒面(具体的构件角色 )*/
public class FriedNoodles extends FastFood{public FriedNoodles() {super(12,"炒面");}@Overridepublic float cost() {return getPrice();}}
package com.jmj.pattern.decorator;public class FriedRice extends FastFood{public FriedRice() {super(10,"炒饭");}@Overridepublic float cost() {return getPrice();}
}
package com.jmj.pattern.decorator;/*** 装饰者类(抽象装饰者角色)*/
public abstract class Garnish extends FastFood{//声明快餐类的变量private FastFood fastFood;public FastFood getFastFood() {return fastFood;}public void setFastFood(FastFood fastFood) {this.fastFood = fastFood;}public Garnish(FastFood fastFood,float price, String desc) {super(price, desc);this.fastFood = fastFood;}
}
package com.jmj.pattern.decorator;/***  鸡蛋类 (具体的装饰者角色)*/
public class Egg extends Garnish{public Egg(FastFood fastFood) {super(fastFood, 1, "鸡蛋");}@Overridepublic float cost() {//计算价格return getPrice()+getFastFood().cost();}@Overridepublic String getDesc() {return super.getDesc()+getFastFood().getDesc();}
}
package com.jmj.pattern.decorator;/***  鸡蛋类 (具体的装饰者角色)*/
public class Bacon extends Garnish{public Bacon(FastFood fastFood) {super(fastFood, 2, "培根");}@Overridepublic float cost() {//计算价格return getPrice()+getFastFood().cost();}@Overridepublic String getDesc() {return super.getDesc()+getFastFood().getDesc();}
}
package com.jmj.pattern.decorator;public class Client {public static void main(String[] args) {//点一份炒饭FastFood friedRice = new FriedRice();System.out.println(friedRice.getDesc()+"  "+friedRice.cost()+"元");System.out.println("============");//在上面的炒饭中加一个鸡蛋friedRice=new Egg(friedRice);friedRice=new Egg(friedRice);System.out.println(friedRice.getDesc()+"  "+friedRice.cost()+"元");friedRice = new Bacon(friedRice);System.out.println(friedRice.getDesc()+"  "+friedRice.cost()+"元");}
}

 其实就是 装饰者类 继承了 原本的 父抽象类,又聚合了 父抽象类

相关文章:

  • vue3中的动态component组件
  • 前端命名规范总结
  • linaro交叉编译工具链下载与使用笔记
  • 量子计算的世界:探索叠加态与Python编程
  • C语言——数组转换
  • Zabbix“专家坐诊”第212期问答汇总
  • 外包干了5个月,技术退步明显.......
  • SELinux refpolicy详解(2)
  • RabbitMQ消息的应答
  • SpringBoot——自定义start
  • 【JavaEE初阶】volatile 关键字、wait 和 notify
  • Python与设计模式--命令模式
  • Ubuntu镜像与K8S冲突,容器持续Terminating
  • 大数据项目前三层--学习笔记
  • PHP:js中怎么使用PHP变量,php变量为数组时的处理
  • [译]CSS 居中(Center)方法大合集
  • 【Amaple教程】5. 插件
  • Git初体验
  • HTTP那些事
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript 基础知识 - 入门篇(一)
  • redis学习笔记(三):列表、集合、有序集合
  • 百度小程序遇到的问题
  • 给Prometheus造假数据的方法
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 深度学习中的信息论知识详解
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 推荐一个React的管理后台框架
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #、%和$符号在OGNL表达式中经常出现
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2.2w字)前端单元测试之Jest详解篇
  • (k8s中)docker netty OOM问题记录
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (简单) HDU 2612 Find a way,BFS。
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)平衡树
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)利用webkit抓取动态网页和链接
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET企业级应用架构设计系列之开场白
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [Android 13]Input系列--获取触摸窗口
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn