最近遇到一个需求,是要对一个类增加一些新的功能,原则上讲是不改变这个类的代码,不改变这个类的继承关系。以前了解过Decorator模式,所以特意又深入学习一会。
什么时候需要Decorator模式:它的主要功能是不改变类的代码和继承关系,为这个类增加功能。
例如我要计划做一件事情(例如 打印某段文字)
public class DoWork(){
public void doWork(){
System.out.prinln("Do Work.....");
}
}
]
可是由于工作变化,我需要在DoWork之前做另外一件事(打印一段特殊文字),并且在做完DoWork以后还要做一些简单的处理(同样是打印文字)。如何在不改变原有的继承关系的前提下实现此功能?
首先我们观察,所有的工作都是围绕做某件事情,所以我们可以抽象出一个接口。
public interface Work(){
public void doWork();
}
所以原有的类可以更改为
public class DoWork implements Work(){
public void doWork(){
System.out.println("Do Work....");
}
}
我们可以考虑按照要求,我们所要添加的两个动作也是围绕的doWork()来做文章,只是具体的实现办法有些变换,我们可以不可以另外添加一个辅助的类 OtherWork,通过他来实现要求中的两个功能,并且调用原来计划要执行的工作。
public class DoAllWork implements Work(){
private Work work;
//为调用原来计划需要执行的任务做准备
public DoAllWork(Work work){
this.work = work;
}
public void beforeWork(){
System.out.println("Before Work....");
}
public void endWork(){
System.out.println("End Work....");
}
public void doWork(){
beforeWork();
work.doWork();
endWork();
}
}
我们测试一下,这个DoAllWork是不是能完成我们的需要
public class Main(){
public static void main(String[] args){
Work work = new DoWork();
DoAllWork daw = new DoAllWork(work);
daw.doWork;
}
}
OK,运行一下,一切都以实现 :) 这种通过简单的一个实现类,帮助我们达到了要求,这种模式就是Decorator模式。
分享到:
相关推荐
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...
Decorator模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在Java中尤其有用,因为它提供了在不改变类结构的情况下扩展类的功能的方法。以下是对Decorator模式的详细...
Decorator模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在Java和其他面向对象编程语言中非常常见,尤其在需要灵活扩展功能而不影响原有类结构的情况下。 在给定...
### Java类库中Decorator模式的应用研究 #### 一、引言 随着软件开发技术的不断发展,设计模式在软件工程中的重要性日益凸显。设计模式能够帮助开发者构建出具有良好结构、高度可扩展性和易于维护的软件系统。其中...
Decorator模式是一种设计模式,主要用来在不改变原有对象的基础上,动态地给对象添加新的行为或属性,从而扩展其功能。这种模式在Java等面向对象语言中广泛应用,它提供了一种比继承更加灵活的扩展机制。 在Java中...
Decorator模式是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的行为或职责,而不会破坏封装性。这种模式的核心思想是通过装饰类包装原对象,实现对原对象功能的扩展,同时保持与原接口的一致性。 ...
DateFormat,Calendar、文件与流、Java变量类型间的相互转换、Java与Web、用连接池提高Servlet访问数据库的效率、Java扩展、应用服务器的集群策略及Java EE 5.0、Java IO 包中的Decorator模式等。
Java设计模式中的装饰模式(Decorator模式)是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而不必通过子类化的方式。这种模式对于系统扩展性和灵活性至关重要,因为它避免了创建大量子类来实现...
提供一种修改类的行为,而避免创建众多的派生类的途径。
Decorator模式的核心在于动态地将责任附加到对象上,通过封装来增加新的行为或职责,使得装饰者和组件(被装饰对象)具有相同的接口,这样就可以透明地对对象进行装饰。 在Java中,Decorator模式通常通过继承和组合...
装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...
猴王学艺的过程,就如同我们在编程中逐步增加对象的能力,通过不同的装饰,猴王学会了七十二般变化,这正是Decorator模式的体现——对象在不改变自身的情况下,通过装饰来获得新能力。 在配套代码中,我们可以看到...
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
Java装饰模式,也被称为Decorator模式,是一种设计模式,它允许在运行时向对象添加新的行为或职责,而不必通过继承的方式来扩展类。这种模式提供了一种比使用子类更加灵活的方式来扩展对象的功能。 装饰模式的核心...
Decorator模式的核心思想是装饰者类与被装饰类有相同的接口,它包装了一个对象,并且可以增加或修改该对象的行为。这种模式避免了对原有类进行大量修改,保持了代码的开放性和封闭性。在Java IO系统中,所有的流类都...
本文研究的主要是python实现Decorator模式,具体介绍如下。 一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类)。首先来看一个简单的例子: # -*- coding: utf-8 -*- ...