今天是我们公司写周报的日子,又要回顾一下一周的工作、学习任务了,感觉这周没有做什么事情,项目刚结束,只有看看书了。
上午刚好看到Decorator这个模式,为了增强学习,就将周报这个实例和它强行绑在一起了,呵呵。
这里还是简单的介绍一下Decorator模式吧:
定义:
在不改变原来对象的结构基础上,动态给一个对象添加一些额外的职责.如果使用子类继承的话,对于每个类的改变都要产生新类,增加了开销。现在这些功能需要由用户动态决定加入的方式和时机.
下面用实例说明一下:
公司的周报汇报关系是:开发员->项目经理->部门经理->CTO
先生成周报吧:
1. WeeklyReport
public interface WeeklyReport {
//这里为了简单说明 只理出周报内容
public String decription();
}
下面我们假设有FellowOne,FellowTwo,FellowThree三个开发员
每个员工只有写周报内容这一个功能。
//FellowOne
public class FellowOne implements WeeklyReport {
private String content = "";
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public String decription() {
String retStr = "";
retStr = "FellowOne:" + content;
return retStr;
}
}
//FellowTwo
public class FellowTwo implements WeeklyReport {
private String content = "";
public void setContent(String content) {
this.content = content;
};
public String getContent() {
return content;
}
public String decription() {
String retStr = "";
retStr = "FellowTwo:" + content;
return retStr;
}
}
//FellowThree
public class FellowThree implements WeeklyReport{
private String content = "";
public void setContent(String content) {
this.content = content;
};
public String decription() {
String retStr = "";
retStr = "FellowThree:" + content;
return retStr;
}
public String getContent() {
return content;
}
}
现在开发员的周报写好了,将要发给项目经理,经理肯定要对每个人的周报进行修改,再加上自己的工作内容,才能一起发给部门经理。
如果经理对每个员工的周报进行修改都产生一个类,那么将新增加3个类,如果有100个员工,那将增加100个子类,太庞大了,下面看看Decorator的作用吧,一个类搞定。
2.经理的周报:Decorator
当然也是周报的一种,所以肯定也是implements WeeklyReport了。
public class Decorator implements WeeklyReport {
private WeeklyReport report;
private List list = new ArrayList();
//默认对一份周报进行修改
public Decorator(WeeklyReport report) {
this.report = report;
}
//一个经理下面肯定有很多开发者的,这里增加他们的周报
public void addWeeklyReport(WeeklyReport report) {
list.add(report);
}
//经理将所有的周报整理 加上自己的东西,形成周报
public String decription() {
String retStr = "nmy Team this week do works:n";
retStr += report.decription() + "n";
for (int i = 0; i < list.size(); i++) {
retStr += ((WeeklyReport) list.get(i)).decription()+"n";
}
System.out.println(retStr);
return retStr;
}
}
3.让我们看看部门经理的周报 是怎么写的吧:
同理部门经理面对的是各个项目经理
public class SubDecorator implements WeeklyReport {
//很明显,部门经理关心的也是周报,
//不过只是从项目经理那边发过来的
private WeeklyReport report;
public SubDecorator(WeeklyReport report) {
this.report = report;
}
//对每份周报进行处理
public String decription() {
String retStr = "nmy department this week finish:";
System.out.println(retStr+report.decription());
return retStr;
}
}
为了简化程序,这里就认为是一个部门经理下面对应一个项目经理,而且默认部门经理不再向上汇报了。
4.让我们看看整个周报的流程吧:
FellowOne one = new FellowOne();
FellowTwo two = new FellowTwo();
FellowThree three = new FellowThree();
one.setContent("study");//fellowOne写周报
two.setContent("nothing");//fellowTwo写周报
three.setContent("finish part A");//fellowThree的周报
//看看项目经理怎么写周报的
Decorator decorator = new Decorator(one);
decorator.addWeeklyReport(two);
decorator.addWeeklyReport(three);
//部门经理得到的只是项目经理的周报,多简单,
//不用管开发者的具体工作,
//项目经理已经写好了
SubDecorator subdec = new SubDecorator(decorator);
subdec.decription();
//项目经理的周报
my Team this week do works:
FellowOne:study
FellowTwo:nothing
FellowThree:finish part A
//部门经理的周报
my department this week finish:
my Team this week do works:
FellowOne:study
FellowTwo:nothing
FellowThree:finish part A
分享到:
相关推荐
设计模式的学习不仅是为了记住每种模式的应用场景,更重要的是理解其背后的原理和设计理念。通过深入学习和实践,开发者可以逐渐掌握这些模式,并将其内化为自己的设计思维。设计模式的学习过程虽然漫长且充满挑战,...
C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...
通过学习和掌握GoF的23种设计模式,可以显著提高程序员的编码水平,使得开发出的软件系统更加健壮、可扩展、易维护。以上每种模式都有其特定的应用场景,理解和掌握它们的关键在于不断实践和总结,在实际项目中灵活...
### 设计模式精解—GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式作为一种重要的面向对象设计工具,在软件开发中扮演着至关重要的角色。本文旨在深入解析GoF(Gang of Four,四人组)提出的23种设计...
C++实现源码提供了具体编程环境下的应用实例,帮助读者更好地理解和应用这些设计模式。通过阅读和实践这些源码,开发者可以更深入地掌握如何在实际项目中灵活运用设计模式,提升代码质量和可维护性。
《设计模式那点事》这本书的PPT为我们提供了一种深入理解和学习设计模式的途径。在这里,我们将深入探讨设计模式的核心概念、分类以及它们在实际开发中的应用。 首先,设计模式基于面向对象编程思想,其核心目标是...
设计模式的学习和应用分为几个阶段:首先自己学会设计模式,然后将其转化为自己的语言表达出来,接着是教授他人并最终记录下来。这种学习路径要求学习者不仅要理解设计模式本身,还要具备清晰的表达能力和深刻的理解...
通过学习和应用这些设计模式,开发者不仅可以提高代码的可读性、可维护性和可扩展性,还能提升团队间的沟通效率,因为设计模式是软件工程中的通用语言。对于任何有志于提升软件开发水平的人来说,理解和掌握设计模式...
通过学习设计模式,我们可以更好地组织代码结构,提高软件质量,同时减少开发过程中的重复工作。本文将详细介绍GoF提出的23种设计模式,并提供C++实现示例,帮助读者深入理解这些模式的应用场景和技术细节。 #### ...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
通过深入学习《设计模式——Java语言中的应用》,开发者能够更好地理解和应用这些模式,从而编写出更加高效、可扩展的Java程序。无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的...
这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...