`

易学设计模式三 装饰模式(Decorator)

阅读更多
装饰者模式
Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。

意图:
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

设计原则:
1. 多用组合,少用继承。
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。
2. 类应设计的对扩展开放,对修改关闭。




上代码实例

public interface Order {
	
	public void print();

}


public class SalesOrder implements Order {

	public void print() {
		
	}
}


public class OrderDecorator implements Order {
	
	protected Order order;
	
	public OrderDecorator(Order order) {
		this.order = order;
	}

	public void print() {
		
		System.out.println("Order");

	}

}


public class HeaderDecorator extends OrderDecorator {

	public HeaderDecorator(Order order) {
		super(order);
	}

	public void print() {
		printHeader();
		super.order.print();
	}
	
	public void printHeader() {
		
		System.out.println("Header");
		
	}

}


public class FooterDecorator extends  OrderDecorator {

	public FooterDecorator(Order order) {
		super(order);
	}
	
	public void print() {
		super.order.print();
		printFooter();
	}
	
	public void printFooter() {
		System.out.println("Footer");
	}

}


public class Client {

	public static void main(String[] args) {
		Order order = new SalesOrder();   		//本来是个销售订单
		order = new OrderDecorator(order);		//我们销售订单装饰一下,就可以打印比如发票订单详细	
		order = new FooterDecorator(order);		//再装饰一下,就可以打印发票尾部
		order = new HeaderDecorator(order);		//再装饰一下,可以打印发票头部
			
		order.print();							//就一个打印就可以打印所有内容了,神奇吧 哈哈
	}

}


打印结果
Header
Order
Footer

其实Java中的流操作就是使用的装饰模式


  • 大小: 40.5 KB
  • 大小: 47.8 KB
分享到:
评论

相关推荐

    易学设计模式源码光盘

    "易学设计模式源码光盘" 提供了一种直观的学习方式,帮助初学者更轻松地理解和应用这些模式。这里我们将深入探讨设计模式的核心理念、主要分类以及一些常见设计模式的实现细节。 首先,设计模式的出现源于对软件...

    [源代码] 《易学 设计模式》 随书源代码

    《易学 设计模式》 郭志学 编著 随书源代码 ☆ 章节清单:☆ 第01章 欲速则不达:了解设计模式 第02章 磨刀不误砍柴工:UML语言概述 第03章 术业有专攻:简单工厂模式 (SimpleFactory) 第04章 精益求精:工厂方法...

    java-易学设计模式

    "java-易学设计模式"这个压缩包很可能是包含了一些关于Java设计模式的示例源代码,方便学习者理解和掌握。 首先,我们来讨论一下设计模式的基本分类。设计模式分为三类:创建型模式、结构型模式和行为型模式。 1. ...

    设计模式例子文档,简单易学

    这份名为"设计模式例子文档,简单易学"的资源,显然是为了帮助开发者更直观、更快速地理解和应用设计模式。设计模式并非具体的代码或库,而是一种通用的解决方案模板,可以在不同的软件开发过程中复用,以提高代码的...

    介绍设计模式的代码

    在“易学设计模式代码”这个压缩包中,你将找到这些模式的Java实现示例。通过阅读和分析这些代码,你可以更好地理解每种模式的核心思想,以及如何在实际项目中应用它们。同时,虽然这里的示例是基于Java,但设计模式...

    Java面试题目总结(137页).docx

    本资源是 Java 面试题目的总结,涵盖了 Java 基础、多线程、设计模式、JVM、数据结构与算法、数据库、Spring、Netty、缓存、技术框架、技术深度、分布式、系统架构、LINUX、TCP/IP 等多方面的知识点。 Java 基础 ...

    第7章 高级函数.pptx

    装饰器是一种设计模式,用于在不修改原函数代码的情况下,给函数添加新的功能。装饰器本质上是一个接受函数作为参数的函数,并返回一个新的函数。 **装饰器的应用场景**: 1. **日志记录**:记录函数的调用情况。 ...

    《Python 程序设计》 张莉主编课后习题答案.zip

    8. **高级主题**:随着学习的深入,可能会接触到装饰器(decorator)、生成器(generator)、上下文管理器(with statement)等高级特性,这些都是Python独特且强大的工具。 通过解答《Python程序设计》的课后习题...

    Joyful-Python:关于Python的介于基础和进阶之间的中文教材,用于了解一些进阶知识和代码设计技巧

    本书将介绍设计模式,如工厂模式、单例模式等,以及SOLID原则,帮助你写出可扩展、可维护的代码。 九、实战项目 理论结合实践是最佳的学习方式。书中将提供一些实际项目案例,如Web应用开发、数据分析、机器学习等...

    面试预备

    - **设计模式**:工厂模式、单例模式、装饰器模式等常见设计模式的理解和应用。 3. **高级Python特性**: - **生成器(Generator)**:理解迭代器和生成器的概念,使用yield关键字创建生成器函数。 - **上下文...

    fdsa:asdfadf

    - 函数装饰器(decorator):用于修改或增强函数的功能。 5. **异常处理**: - try-except语句:捕获并处理运行时错误。 - finally子句:无论是否发生异常,finally代码块都会执行。 6. **文件操作**: - 打开...

Global site tag (gtag.js) - Google Analytics