装饰边框 与 被装饰物 一致的 Decorator模式
文章目录
- Decorator模式
- 应用场景
- 本质
- 优点
- 缺点
- 角色
- Decorator模式的类图
- 示例程序
- 示例程序的类图
- 示例代码
- 拓展思路
- 相关设计模式
- 满足的原则
Decorator模式
应用场景
- 当我们需要为某个现有的对象,动态的增加一个新的功能或职责时,可以考虑使用装饰模式。
- 适应于某个对象的职责经常发生变化或者经常需要动态的增加职责,避免因为这种为了适应这样的变化,而增加继承子类扩展的方式
本质
- 动态组合
优点
- 装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比 继承更多的灵活性。
- 通过使用不同的其体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
缺点
- 会产生很多细粒度对象
角色
- 抽象构件(Component)角色:
给出一个抽象接口,以规范准备接收附加责任的对象。 - 具体构件(Concrete Component)角色:
实现组件对象接口,通常就是被装饰器装饰的对象。 - 装饰(Decorator)角色:
持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。 - 具体装饰(Concrete Decorator)角色:
负责给构件对象"贴上"附加的责任。
Decorator模式的类图
示例程序
示例程序的类图
示例代码
public abstract class Component {protected String name;protected double mon;public Component() {}public Component(String name, Double mon) {this.name = name;this.mon = mon;}public abstract double money();
}
public class Leader extends Component {public Leader() {super();}public Leader(String name, double mon) {super(name, mon);}@Overridepublic double money() {return mon;}}
public class Person extends Component {public Person() {super();}public Person(String name, double mon) {super(name, mon);}@Overridepublic double money() {return mon;}}
public class Money1 extends Component {private Component ob1;public Money1(String name, Double mon) {super(name, mon);}public Money1(Component ob1) {super();this.ob1 = ob1;this.mon=this.ob1.mon;this.name=this.ob1.name;}@Overridepublic double money() {this.ob1.mon=ob1.money();return this.ob1.mon;}}
public class Money2 extends Component {private Component ob2;public Money2(Component ob2) {super();this.ob2 = ob2;this.mon=this.ob2.mon;this.name=this.ob2.name;}@Overridepublic double money() {this.ob2.mon=2*ob2.money();return this.ob2.mon;}}
public class Main {public static void main(String[] args) {Money1 money1=new Money1(new Person("小张",5000));System.out.println(money1.money());Money2 money2=new Money2(new Money1(new Leader("小李",50000)));System.out.println(money2.money());}
}
拓展思路
- 接口API的透明性
- 动态地增加功能
相关设计模式
- 适配器模式
装饰模式可以在不改变被装饰物的接口的前提下,为被装饰物添加边框。
适配器模式用于适配两个不同的接口。 - 策略模式。
策略模式,通过整体的替换算法来改变类的功能
装饰模式通过增加边框来改变类的功能。
满足的原则
- 开放封闭原则
- 合成聚合原则
装饰边框 与 被装饰物 一致的 Decorator模式相关推荐
- Decorator模式------装饰边框与被装饰物的一致性
1. >>不断地为对象装饰的设计模式称为Decorator 模式. 2. 示例程序 >>功能:给文字添加装饰边框.这里所谓的装饰边框是指用" - " &qu ...
- 【笔记整理】图解设计模式 | 第12章 Decorator模式(装饰边框与被装饰物的一致性)
[笔记整理]图解设计模式 | 导航 定义 不断地为对象添加装饰的设计模式被称为Decorator模式,其中Decorator指的是"装饰物". Decorator模式中的登场角色 ...
- 设计模式(十二)-装饰器模式(Decorator Pattern)——装饰边框与被饰物的一致性
装饰器模式(Decorator Pattern)能不断的为对象添加装饰. Display.java package com.test.dp.Decorator.Sample;//抽象类,用于显示字符串 ...
- 设计模式-Decorator模式(装饰者模式)
文章目录 装饰者模式 代码实现 为什么使用装饰者模式 装饰者模式 假如现在有一块蛋糕, 加上奶油就是奶油蛋糕.如果继续再加上草莓,就是草莓蛋糕,再加点蜡烛,就变成了生日蛋糕.不论是蛋糕.奶油蛋糕.草莓 ...
- 11.设计模式--装饰者模式(Decorator模式)
1.定义 装饰者模式是一种结构型模型,是动态的给对象增加职责,对于新增功能来说要比通过子类方式更加的灵活. 想想一下现在有一块蛋糕,他本质上就是一个蛋糕,而如果在蛋糕上加上巧克力就变成了巧克力蛋糕,而 ...
- 设计模式学习笔记——装饰(Decorator)模式
设计模式学习笔记--装饰(Decorator)模式 @(设计模式)[设计模式, 装饰模式, decorator] 设计模式学习笔记装饰Decorator模式 基本介绍 装饰案例 类图 实现代码 Dis ...
- 设计模式--装饰者(Decorator)模式
模式定义 动态(组合)地给一个对象增加一些额外的职责,就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码并且减少子类个数) 类图 应用场景 扩展一个类的功能或给一个类添加附 ...
- android 装饰着模式,Android与设计模式——装饰者(Decorator)模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...
- android银色质感按钮,银色装饰边框承载接口与按键_手机Android频道-中关村在线...
三星I699的机身侧面全部被极具金属质感的银色装饰边框包裹起来,整体看来非常抢眼.虽然银色的包边还算常见,但三星I669在这个边框上也还是下了一些功夫的.仔细看的话可以发现边框并不像机身那样采用了平滑 ...
最新文章
- 嵌入式系统一次EMMC测试的体会及错误分析过程
- 扩增子图表解读1箱线图:Alpha多样性,老板再也不操心的我文献阅读了
- java对象的强引用,软引用,弱引用和虚引用
- mysql的多master调度_innodb中master线程的调度的算法改进(mysql 5.6.26)
- 前端学习(2970):首页的简单尝试
- C#中跨窗体操作(1)--事件
- linux的基础知识——TCP通信状态
- pytorch实现基本AutoEncoder与案例
- RFC2616中文版(8)连接
- 如何运行自动 Mac 清理
- Redis持久化的方式
- 教你如何安装字体包 ——思源免费商用字体
- 应用COMSOL Multiphysics分析水平井压裂裂缝应力干扰现象
- 软件测试用例常用七大方法
- MIT线性代数笔记七 列空间和零空间求解 Ax=0:主变量和特解
- Java 设计模式 本文代码拉取链接 https://gitlab.com/zhangpengweiLJ/designpettern.git
- 游戏获取服务器信息,易语言获取游戏服务器信息
- Android指南针代码示例
- 57BYG250B步进电机+SR4驱动器
- linux修改证书通用名,linux – 证书通用名称`* .c.ssl.fastly.net’与请求的主机名不匹配...