设计模式3:装饰模式
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。
为了避免子类数量的快速膨胀,我们可以用装饰模式为对象动态的增加功能。
这些功能应该是没有相互关联和先后顺序的。
举例来说,一个人可以穿各种不同的装扮,如果为每套打扮生成一个子类,那么子类的数量将爆炸。
可以将装饰模式应用进来,使用衣物装饰人。
来看UML图:
Component类是公共基类,定义了show方法。
Person类继承Component类,实现show方法。
Cloth对象将Component类作为其实例变量。
Trouser和TShirts类实现了show方法。
来看具体代码:
public abstract class Component {public abstract void show();
}
Component定义一个虚方法。
public class Person extends Component {private String name = null;public Person(String name) {this.name = name;}public void show() {System.out.println("我是" + name);}
}
Person实现了这个虚方法。
public class Cloth extends Component {protected Component component = null;public Cloth(pers.zcy.decorator.Component component) {super();this.component = component;}@Overridepublic void show() {if(component != null){component.show();}}}
Cloth类是装饰器的基类,其中包含一个Component实例对象,在show中调用这个实例对象的show方法。
public class Trouser extends Cloth {public Trouser(Component component) {super(component);// TODO Auto-generated constructor stub}@Overridepublic void show(){super.show();System.out.println("我穿了裤子");}
}public class TShirts extends Cloth {public TShirts(Component component) {super(component);}@Overridepublic void show(){super.show();System.out.println("我穿了T恤");}
}
这两个类重写show方法,同时显式调用父类方法。
public class DecoratorDemo {public static void main(String[] args) {Person person = new Person("Mike");Cloth tshirts = new TShirts(person);Cloth trousers = new Trouser(tshirts);trousers.show();}
}
转载于:https://www.cnblogs.com/zcy-backend/p/6670652.html
设计模式3:装饰模式相关推荐
- 设计模式之装饰模式20170726
结构型设计模式之装饰模式: 一.含义 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活. 通俗来讲,装饰模式是对类的功能进行加强或减弱. 二.代码说明 1.主要有两个角 ...
- java设计模式之装饰模式_Java中的装饰器设计模式
java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...
- 大话设计模式之装饰模式(python实现)
大话设计模式之装饰模式 使用场景 定义 装饰模式结构图 python实现装饰模式 代码结构图 优点 使用场景 建造过程不稳定,不确定.把所需的功能按照正确的顺序串联起来进行控制. 新加入的东西仅仅是为 ...
- 设计模式之装饰模式详解(附应用举例实现)
文章目录 1 装饰模式介绍 2 装饰模式详解 2.1 装饰模式结构 2.2 装饰模式实现 2.3 装饰模式应用举例 3 透明装饰模式和半透明装饰模式 1 装饰模式介绍 在生活中,我们往往会给图片增加一 ...
- 设计模式之 装饰模式
设计模式之 装饰模式 概述: 装饰模式(Decorator Pattern) 又叫装饰者模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也 ...
- 设计模式之装饰模式(Decorator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式之三 装饰模式
1.场景模拟 这样让想起了老李,我跟老李是很要好的哥们,当然他不像我还是光棍,所以他不光有友情还有爱情了,不过,就在最近几天他们吵架啦,什么原因?就不多说啦,总之身为男人的老李还是决定主动认错挽回女方 ...
- 大话设计模式之装饰模式
装饰模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 通过下列代码加深下理解 ...
- (C#)设计模式之装饰模式
1.装饰模式 动态的给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更加灵活.*装饰模式是为已有功能动态添加更多功能的一种方式.*装饰模式将原有类中的核心职责与装饰功能分离.简化了原有 ...
- JAVA设计模式之装饰模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...
最新文章
- 记一次 解决 vue 兼容ie11 的问题
- tensorflow object detection API训练错误解决
- Android事件机制详解
- Spring官方阅读笔记-@Controller官方解析与实例(5.0.12)
- 清华发布新版计算机学科推荐学术会议和期刊列表,与CCF有何不同?
- springBoot整合rabbitmq并测试五种常用模型
- sys.dm_db_wait_stats
- c语言默认参数_GCC 11 将默认前端语言改成 C++ 17
- MyBatis——13用mybatis实现银行转账
- date类型被fastjson变为long类型一串数字
- 20200528 前端开发日报
- QStyle之PenStyle的CustomDashLine使用
- 开源Api后台服务/管理系统 HoServer
- P1827 [USACO3.4] 美国血统 American Heritage
- 【网络安全】细分领域总览
- 采油厂污水选用流量计的类型建议
- CAN Open基础知识
- 格雷希尔GripSeal外螺纹快速连接器的优点和注意事项
- 团队项目--地铁信息查询
- C语言期末程序设计(高铁客运订票系统)
热门文章
- HelloMyBLOG!!!
- [转]虚拟机网络模式简介
- jsp的flash小例子
- 数据库 -- 由数据库连接池引出的三种设计模式
- 计算机应用基础简单实操,浅谈《计算机应用基础》实操课的教学管理
- 强制生成32位arm程序_3. 从0开始学ARM-ARM模式、寄存器、流水线
- java date dateformat_Java中SimpleDateFormat的使用方法
- poj1985 Cow Marathon(树的直径#入门)
- 实时数仓入门训练营:Hologres性能调优实践
- AI体验馆上线!集成业界领先NLP场景深度迁移学习框架EasyTransfer