《设计模式》对Decorator的描述:动态给一个对象添加一些额外职责。就添加功能来说,Decorator模式比生成子类更灵活。
Decorator让我感觉设计者非常聪明,这是个好有趣聪慧的模式,马上看例子:
1.不使用Decorator模式的设计:
a.需求:打印正文
java 代码
- public
class
Ticket{
- public
void
prtTicket(){
- System.out.println("Sales Ticket"
);
- }
- }
b.需求改变:打印正文前,先打印Header
java 代码
- public
class
Ticket{
- public
void
prtTicket(){
- System.out.println("Header"
);
- System.out.println("Sales Ticket"
);
- }
- }
c.需求再度改变:正文后打印Footer
java 代码
- public
class
Ticket{
- public
void
prtTicket(){
- System.out.println("Header"
);
- System.out.println("Sales Ticket"
);
- System.out.println("Footer"
);
- }
- }
2.使用Decorator后的设计:
java 代码
- abstract
public
class
Component{
- abstract
public
void
prtTicket();
- }
-
- abstract
public
class
TicketDecorator extend Component {
- private
Component myTrailer;
- public
TicketDecorator(Component comp){
- myTrailer = comp;
- }
- public
void
callTrailer(){
- if
(myTrailer !=
null
)
- myTrailer.prtTicket();
- }
-
- }
-
- public
class
SaleTicket extend Component{
- public
void
prtTicket(){
- System.out.println("Sale Ticket"
);
- }
- }
-
- public
class
Header extend TicketDecorator{
- public
Header(Component comp){
- super
(comp);
- }
- public
void
prtTicket(){
- System.out.println("Header"
);
- super
.callTrailer();
- }
- }
-
- public
class
Footer extend TicketDecorator{
- public
Footer (Component comp){
- super
(comp);
- }
- public
void
prtTicket(){
- super
.callTrailer();
- System.out.println("Footer"
);
- }
- }
-
- public
class
Test{
- public
static
void
main(String args[]){
- Component c = new
Header(
new
Footer(
new
SaleTicket()));
- c.prtTicket();
- }
- }
于是,无论添加多少个功能,每个Decorator都之关心自己的功能,我们能任意重排Decorator的顺序,无需改变任何代码。
在java io中用到了Decorator模式。
分享到:
相关推荐
8. 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。装饰者模式可以用来扩展功能,而无需修改原有代码。 9. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于远程...
如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰者模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)等。 - **行为型模式**:关注于对象间的职责分配,...
本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...
- **装饰器模式**(Decorator):动态地给一个对象添加一些额外的责任。 - **外观模式**(Facade):为子系统中的一组接口提供一个一致的界面。 - **享元模式**(Flyweight):运用共享技术有效地支持大量细粒度...
以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
结构模式是指在对象之间的关系和结构上使用的模式,包括 Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade(外观模式)...
在这个“C#面向对象设计模式纵横谈”系列的第十篇中,我们将深入探讨Decorator模式。 首先,让我们了解装饰模式的基本组件: 1. **Component(组件)**:这是被装饰的对象的接口。它可以是抽象类或接口,定义了...
- Decorator模式:动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活。 - Composite模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户对单个对象和组合对象...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...
Java设计模式中的Builder模式和Decorator模式是两种重要的设计模式,它们在软件开发中起到优化代码结构、提高代码复用性和灵活性的作用。 1. 建造者模式(Builder) 建造者模式是一种创建型设计模式,它的主要目的...
本资料“图解Java设计模式笔记总结word版本”聚焦于通过图文并茂的方式,深入浅出地解析各种设计模式。以下是基于这个主题的详细知识点讲解: 1. **设计模式的分类** - **创建型模式**:如单例(Singleton)、工厂...
- 装饰模式(Decorator):动态地给对象添加一些额外的职责,提供了比继承更有弹性的扩展方式。 - 外观模式(Facade):为子系统提供一个统一的接口,简化其使用。 - 享元模式(Flyweight):通过共享技术有效地...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
2. 结构型模式:如适配器模式(Adapter)、装饰器模式(Decorator)、桥接模式(Bridge)等,用于组合对象或类,改善它们的结构。 3. 行为型模式:如策略模式(Strategy)、观察者模式(Observer)、访问者模式...
这份由台湾作者编写的笔记,结合Java语言,为读者提供了一种深入理解并应用设计模式的方式。以下是对这些设计模式的详细解释: 1. **创建型模式(Creational Patterns)** 创建型模式关注于对象的创建过程,它们帮助...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过增加额外的装饰来增强一个物体的外观,同样地,...