`

【设计模式】17.装饰模式

 
阅读更多
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
优点:
1.装饰类和被装饰类可以独立发展,而不会相互耦合。
2.装饰模式是继承关系的一个替代方案。
3.装饰模式可以动态地扩展一个实现类的功能。
缺点:多层的装饰是比较复杂的。尽量减少装饰类的数量,以便降低系统的复杂度。
使用场景:
1.需要扩展一个类的功能,或给一类增加附加功能。
2.需要动态地给一个对象增加功能,这些功能更可以再动态地撤销。
3.需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。

package com.syc.designpatterns.chapter17;

public abstract class SchoolReport {
	// 成绩单主要展示的就是你的成绩情况
	public  abstract void report();
	// 成绩单要家长签字,这个是最要命的
	public abstract void sign(String name);
}

package com.syc.designpatterns.chapter17;

public class FouthGradeSchoolReport extends SchoolReport {

	// 我的成绩单
	public void report() {
		// 成绩单的格式是这个样子的
		System.out.println("尊敬的XXX家长");
		System.out.println(" ......");
		System.out.println(" 语文 62 数学 65 体育98 自然 63");
		System.out.println(" ......");
		System.out.println("                家长签名:");
	}

	// 家长签名
	public void sign(String name) {
		System.out.println("家长签名为:" + name);
	}

}

package com.syc.designpatterns.chapter17;

public abstract class Decorator extends SchoolReport{

	// 首先我要知道是哪个成绩单
	private SchoolReport sr;
	
	// 构造函数,传递成绩单过来
	public Decorator(SchoolReport sr) {
		this.sr = sr;
	}

	// 成绩单还是要被看到的
	public void report() {
		this.sr.report();
	}

	// 看完还是要签名的
	public void sign(String name){
		this.sr.sign(name);
	}
}


package com.syc.designpatterns.chapter17;

public class HighScoreDecorator extends Decorator {

	// 构造函数
	public HighScoreDecorator(SchoolReport sr){
		super(sr);
	}
	
	// 我要汇报最高成绩
	private void reportHighScore(){
		System.out.println("这次考试语文最高是75,数学是78,自然是80");
	}
	
	// 我要在老爸看成绩单签告诉他最高成绩,否则等他一看,就抡起扫帚揍我,我哪里还有机会说啊
	public void report() {
		this.reportHighScore();
		super.report();
	}

}

package com.syc.designpatterns.chapter17;

public class SortDecorator extends Decorator {

	// 构造函数
	public SortDecorator(SchoolReport sr) {
		super(sr);
	}
	
	// 告诉老爸学校的排名情况
	private void reportSort(){
		System.out.println("我是排名第38名...");
	}
	
	// 老爸看完成绩单后再告诉他,加强作用
	public void report(){
		super.report();
		this.reportSort();
	}
}

package com.syc.designpatterns.chapter17;

public class Father {
	
	public static void main(String[] args){
		// 把成绩单拿过来
		SchoolReport sr;
		// 原装的成绩单
		sr = new FouthGradeSchoolReport();
		// 加了最高分说的成绩单
		sr = new HighScoreDecorator(sr);
		// 又加了成绩排名的说明
		sr = new SortDecorator(sr);
		// 看成绩单
		sr.report();
		// 然后老爸一看,很开心,就签名了
		sr.sign("老三");
	}
}
分享到:
评论

相关推荐

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

    设计模式_源代码大全.zip

    设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...

    包含javascript的基础语法,面向对象的实现和设计模式实现.zip

    包含javascript的基础语法,面向对象的实现和设计模式实现Javascript 代码其中很多都是伪代码的写法,便有回顾和总结。参考资料包含javascript的基础面向对象的实现设计模式实现语法开javascript常见的问题...

    01.装饰者设计模式和动态代理设计模式.wmv

    01.装饰者设计模式和动态代理设计模式.wmv

    您的设计模式.pdf。

    涵盖了策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式、装饰模式、迭代器模式等十四种常用的设计模式。 策略模式...

    设计模式源码.zip

    设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的模板,为软件设计提供可重用的解决方案。这些模式已经被广泛接受并应用于各种编程语言中,包括C#。本压缩包"设计模式源码.zip"包含了基于C#的...

    设计模式学习.zip

    本资源"设计模式学习.zip"聚焦于C++编程语言中的设计模式应用,是2017年的一次黑马程序员培训课程的配套代码,旨在帮助学习者通过实际的代码示例来理解和掌握设计模式。 在C++中,设计模式主要分为三大类:创建型...

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    C++种设计模式 装饰模式.rar

    C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...

    23种设计模式 -设计模式图解.7z

    23种设计模式的特点定义、优缺点、使用场景,源码中如何使用,资料思维导图。总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七...

    第03章 从架构层面看设计模式02.pdf

    本章节通过一个电商设计模式实战案例,详细阐述了代理模式、享元模式、装饰者模式、工厂模式和状态模式在实际业务场景中的运用。 1. 代理模式 代理模式的核心在于提供一个代理对象,它充当原对象的中介,控制对原...

    设计模式中文.rar

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。这些模式经过时间的验证,已被广泛接受,并被用来指导软件开发中的类和对象的交互。"设计模式中文.rar"这个压缩包文件显然是针对...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...

    CC++与设计模式讲义.pdf

    这份文件是一份关于C++和设计模式的讲义,旨在帮助读者轻松入门并应用设计模式。文件中提到,设计模式是一套经过分类和编目、反复使用、多数人知晓、并且是代码设计经验的总结。它们之所以被广泛采用,是为了代码的...

    《设计模式》.zip

    《设计模式》是一本经典的信息技术著作,主要探讨了软件工程中的设计模式,这些模式是经验丰富的开发者在解决常见设计问题时所总结的最佳实践。设计模式不仅有助于提高代码的可读性和可维护性,还能促进团队间的沟通...

    设计模式解析.pdf

    《设计模式解析.pdf》这本书是面向Java编程初学者的一份宝贵资源,它深入浅出地讲解了设计模式这一核心概念。设计模式是软件工程中经过长期实践总结出来的一种解决常见问题的最佳实践,对于提升代码质量、可维护性和...

    golang design pattern go 设计模式实现.zip

    "golang design pattern go 设计模式实现.zip" 文件提供了23种Go语言设计模式的实现,这些模式主要来自于经典的《设计模式:可复用面向对象软件的基础》一书,即通常所说的GOF(Gang of Four)设计模式。 1. **单例...

    设计模式uml.vsdx

    自己看书整理的23种设计模式的类图,集中起来方便看,也在这里保存一下,丢了不好,下面是为…… 1.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...

    54-Spring设计模式之装饰器模式1

    Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...

    韩顺平设计模式资料.rar

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在Java编程领域,设计模式被广泛应用,帮助开发者编写可维护、可扩展和可复用的代码。本套资料《韩顺平设计模式》由...

Global site tag (gtag.js) - Google Analytics