Java 设计模式—装饰者模式
在Java编程语言中,嵌套了非常多设计模式的思想,比如IO流中的缓冲流就使用到以下要介绍的装饰者设计模式。
演示样例代码:
- * 抽象构件角色:定义一个抽象接口,来规范准备附加功能的类
- * @author Admin
- *
- */
- public interface Drink { //被装饰者的基类
- public String description();
- public int price();
- }
- /**
- * 详细构件角色:将要被附加功能的类,实现抽象构件角色接口
- * @author Admin
- *
- */
- public class SoyaBeanMilk implements Drink{ //被装饰者的详细类
- public String description() {
- return "豆浆";
- }
- public int price() {
- return 2;
- }
- }
- /**
- * 抽象装饰者角色:持有对详细构件角色的引用(被装饰者)并实现抽象构件角色一致的接口
- * @author Admin
- *
- */
- public class Decorator implements Drink{ //装饰者的基类
- private Drink drink;
- public Decorator(Drink drink) {
- this.drink = drink;
- }
- public String description() {
- return drink.description();
- }
- public int price() {
- return drink.price();
- }
- }
- /**
- * 详细装饰角色:实现抽象装饰者角色。负责为详细构件加入额外功能.
- * @author Admin
- *
- */
- public class Sugar extends Decorator{ //装饰者详细类
- public Sugar(Drink drink) {
- super(drink);
- }
- public String description() {
- return super.description()+" 糖";
- }
- public int price() {
- return super.price()+1;
- }
- }
- /**
- * 详细装饰角色:实现抽象装饰者角色,负责为详细构件加入额外功能.
- * @author Admin
- *
- */
- public class BlackBean extends Decorator{
- public BlackBean(Drink drink) {
- super(drink);
- }
- public String description() {
- return super.description()+" 黑豆";
- }
- public int price() {
- return super.price()+3;
- }
- }
- /**
- * 測试类(測试装饰者模式)
- * @author Admin
- *
- */
- public class Test {
- public static void main(String[] args) {
- Drink drink = new SoyaBeanMilk(); //被装饰者(豆浆)
- System.out.println(drink.description()+"花费:"+drink.price());
- Drink drink1 = new Sugar(drink); //糖是装饰者类。用来装饰豆浆
- System.out.println(drink1.description()+"花费:"+drink1.price());
- Drink drink2 = new BlackBean(drink); //用黑豆来装饰豆浆
- System.out.println(drink2.description()+"花费:"+drink2.price());
- Drink drink3 = new BlackBean(drink1); //用黑豆来装饰糖豆浆
- System.out.println(drink3.description()+"花费:"+drink3.price());
- }
- }
实验结果:
Java 设计模式—装饰者模式的更多相关文章
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 从源码角度理解Java设计模式——装饰者模式
一.饰器者模式介绍 装饰者模式定义:在不改变原有对象的基础上附加功能,相比生成子类更灵活. 适用场景:动态的给一个对象添加或者撤销功能. 优点:可以不改变原有对象的情况下动态扩展功能,可以使扩展的多个 ...
- 【设计模式】Java设计模式 - 装饰者模式
Java设计模式 - 装饰者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自 ...
- JAVA 设计模式 装饰者模式
用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构
- Java设计模式の装饰者模式
目录 一.问题引入 二.设计原则 三.用装饰者模式解决问题 四.装饰者模式的特点 五.装饰者模式的定义 六.装饰者模式的实现 七.java.io包内的装饰者模式 一.问题引入 咖啡店的类设计: 一个饮 ...
- Java设计模式--装饰器模式到Java IO 流
装饰器模式 抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象. 具体构件角色:定义准备接受附加责任的对象. 抽象装饰角色:持有一个构件对象的实例,并对应一个与抽象构件接口一致的接口. 具体 ...
- JAVA设计模式---装饰者模式
写在前面的话: 该模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案.装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的 ...
- 设计模式-装饰者模式(Decorator Pattern)
本文由@呆代待殆原创,转载请注明出处. 此设计模式遵循的设计原则之一:类应该支持扩展,而拒绝修改(Open-Closed Principle) 装饰者模式简述 装饰者模式通过组合的方式扩展对象的特性, ...
随机推荐
- 使用Java生成word文档(附源码)
当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...
- Django总结二
- 创建app应用与ORM操作 - Django项目project - app(应用) -> 不同的功能放在不同的app中 - 命令 : - 创建app python manage.py sta ...
- IOS开发之Swift学习笔记
1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.
- 去除IOS苹果手机自带按钮样式的问题~
input[type="button"], input[type="submit"], input[type="reset"] { -web ...
- 在PHP中调用php_ssh实现远程登陆linux服务器并执行shell脚本。
这个功能主要用于在web端利用程序对远程服务器进行操作,通过PHP_ssh执行shell脚本来实现. 首先要安装php_ssh2组件,linux中centos7下有ssh2源,直接安装.window下 ...
- linu下nginx的安装
这里用到的环境是nginx-1.8.0,linux用的是CentOS-7-x86_64-DVD-1804.iso版本 1 什么是nginx Nginx ("engine x") ...
- gitlab分享项目到其它组
1. 找到以下页面(管理员权限),随便点入一个项目 2. 点击edit编辑 3.点击members 4. 查看是否分享成功
- Nginx配置文件的高亮显示设置
linux系统下vim或者vi编辑器默认是没有对nginx的语法高亮设置. 1.下载vi语法高亮配置到 ~/.vim/syntax,如果不存在则创建该目录,cd ~/.vim/syntax wget ...
- PHP websocket之聊天室实现
PHP部分 <?php error_reporting(E_ALL); set_time_limit(0);// 设置超时时间为无限,防止超时 date_default_timezone_set ...
- Python面向对象----继承, 重载
1. 面向对象三大特性之继承. 继承的便捷是子类可以直接调用父类里面的方法和属性.(在强类型语言里面是只能调用公有成员), 不用重复的造轮子. 减少程序猿的负担.实现多态等上层结构 2. 父类代码 3 ...