装饰器模式 decorator

所有的说明和解释都在代码中有注释来标明

package mode.decorator;

/**
 *
 * 这里定义一个接口,在接口中定义我们要执行的操作。
 *
 * 以后所有的装饰器以及我们要装饰的对象都要实现这个接口。有了这样的大前提,我们就可以其用 Sourcable来定义我们的装饰器和要装饰的对象了
 *
 * */
public interface Sourcable {
	public void operation();
}
package mode.decorator;

/**
 *
 * 所有的装饰器都要实现Sourcable接口,并且要有Sourcable接口的属性以及以Sourcable接口为参数的构造方法
 *
 * 在operation中调用传入的Sourcable参数对应的operation方法,当然要加入一些装饰器自己的代码,这些代码就是装饰
 *
 * */
public class Decorator1 implements Sourcable {
	private Sourcable sourcable;

	public Decorator1(Sourcable sourcable) {
		super();
		this.sourcable = sourcable;
	}

	@Override
	public void operation() {
		System.out.println("第一个装饰器前");
		this.sourcable.operation();
		System.out.println("第一个装饰器后");
	}

}
package mode.decorator;

/**
 *
 * 所有的装饰器都要实现Sourcable接口,并且要有Sourcable接口的属性以及以Sourcable接口为参数的构造方法
 *
 * 在operation中调用传入的Sourcable参数对应的operation方法,当然要加入一些装饰器自己的代码,这些代码就是装饰
 *
 * */
public class Decorator2 implements Sourcable {
	private Sourcable sourcable;

	public Decorator2(Sourcable sourcable) {
		super();
		this.sourcable = sourcable;
	}

	@Override
	public void operation() {
		System.out.println("第二个装饰器前");
		sourcable.operation();
		System.out.println("第二个装饰器后");
	}

}
package mode.decorator;

/**
 *
 * 所有的装饰器都要实现Sourcable接口,并且要有Sourcable接口的属性以及以Sourcable接口为参数的构造方法
 *
 * 在operation中调用传入的Sourcable参数对应的operation方法,当然要加入一些装饰器自己的代码,这些代码就是装饰
 *
 * */
public class Decorator3 implements Sourcable {

	private Sourcable sourcable;

	public Decorator3(Sourcable sourcable) {
		super();
		this.sourcable = sourcable;
	}

	public void operation() {
		System.out.println("第三个装饰器前");
		sourcable.operation();
		System.out.println("第三个装饰器后");

	}
}
package mode.decorator;

/**
 *
 * 最后是要被装饰的对象,直接实现Sourcable接口就行,并且在operation中实现自己的代码
 *
 * */
public class Source implements Sourcable {

	@Override
	public void operation() {
		System.out.println("原始类的方法");
	}

}

测试

package mode.decorator;

public class Test {
	public static void main(String[] args) {
		Sourcable source = new Source();

		// 装饰类对象
		Sourcable obj = new Decorator1(new Decorator2(new Decorator3(source)));
		obj.operation();
	}
}
时间: 2024-10-12 06:39:04

装饰器模式 decorator的相关文章

设计模式(八)装饰器模式Decorator(结构型)

设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上. 通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静态的,用户不能控制增加行为的方式和时机.如果  你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许

说说设计模式~装饰器模式(Decorator)

装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序,让程序代码不那么死板! 何时能用到它? 1. 需要扩展一个类的功能,或给一个类添加附加职责. 2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销. 3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实. 4. 当不能采用生成子类的方法进行扩充时. 其中我们认为第四种

设计模式入门之装饰器模式Decorator

//装饰模式定义:动态地给一个对象加入一些额外的职责. //就添加功能来说.装饰模式比生成子类更为灵活 //这也提现了面向对象设计中的一条基本原则,即:尽量使用对象组合,而不是对象继承 //Component:组件对象的接口.能够给这些对象动态加入职责 //ConcreateComponet:详细的组件对象.实现组件对象接口.通常就是被装饰器装饰的对象.也就是能够给这个对象加入职责 //Decorator:全部装饰器的抽象父类,须要定义一个与组件接口一致的接口,并持有一个Component对象,

Java设计模式——装饰器模式(Decorator)

孙悟空有七十二般变化,他的每一种变化都给他带来一种附加本领.而不管孙悟空怎么变化在二郎神眼里,他永远是那只猢狲. 装饰器模式以对客户透明的方式动态的给一个对象附加上更多的责任. 在孙悟空的例子里,老孙变成的鱼儿相当于老孙的子类. 装饰模式的类图如下: 装饰模式的角色介绍: 抽象构件角色(ComponentDec):给出一个抽象接口,以规范准备接收附加责任的对象 具体构件(Concrete ComponentDec):定义一个将要接收附加责任的类 装饰角色(Decortor):持有一个构件对象的实

说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现

返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以通过配置进行一种消息的订制,如,你可以订制email,sms,rtx,qq等,但不能同时采用多种机制完成消息的发送,这在一些情况下是没有问题的,但有时,我们也需要同时为客户提供多种消息的推送,这在目前还是挺现时的,如在用户下单后,同时为它发email 和短信进行通过,并对每个订单的过程进行跟踪并通知

23种设计模式之装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 通过采用组合.而非继承的手法,Decorator模式实现了在运行时动态地扩展对象功能的能力,而且可以根据需要扩展多个功能.避免了单独使用继承带来的“灵活性差"和"多子类衍生问题". 优点:装饰类和被装饰类可以独立发

用最简单的例子理解装饰器模式(Decorator Pattern)

假设有一个公司要做产品套餐,即把不同的产品组合在一起,不同的组合对应不同的价格.最终呈现出来的效果是:把产品组合的所有元素呈现出来,并显示该组合的价格. 每个产品都有名称和价格,首先设计一个关于产品的抽象基类. public abstract class ProductBase { public abstract string GetName(); public abstract double GetPrice(); } 所有的产品都必须继承这个基类,比如家居用品.电器产品等,把这些具体的产品提

设计模式(三)——装饰器模式(Decorator Pattern)

发现太过于刻意按照计划来写博客,有点不实际,刚好最近在一个网课上复习AOP的知识,讲到了装饰器模式和代理模式,顺便复习总结一下. 首先了解一下装饰器模式,从名字里面可以看出来,装饰器模式就类似于房子装潢吧,比如刚买的毛坯房,只有一个没有门,直接就可以进去. 首先设计一个房子类Room,实现一个进入方法Access /// <summary> /// 抽象接口 用来进行约束 /// </summary> public interface IAccess { void Access()

php装饰器模式(decorator pattern)

十一点了. <?php /* The decorator pattern allows behavior to be added to an individual object instance, without affecting the behavior of other instances of the same class. We can define multiple decorators, where each adds new functionality. */ interface