`
biqing0427
  • 浏览: 57221 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

我工作的那点事--学习《设计模式》实例应用(decorator模式)

阅读更多
   今天是我们公司写周报的日子,又要回顾一下一周的工作、学习任务了,感觉这周没有做什么事情,项目刚结束,只有看看书了。

   上午刚好看到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
分享到:
评论

相关推荐

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    设计模式的学习不仅是为了记住每种模式的应用场景,更重要的是理解其背后的原理和设计理念。通过深入学习和实践,开发者可以逐渐掌握这些模式,并将其内化为自己的设计思维。设计模式的学习过程虽然漫长且充满挑战,...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    通过学习和掌握GoF的23种设计模式,可以显著提高程序员的编码水平,使得开发出的软件系统更加健壮、可扩展、易维护。以上每种模式都有其特定的应用场景,理解和掌握它们的关键在于不断实践和总结,在实际项目中灵活...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码

    ### 设计模式精解—GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式作为一种重要的面向对象设计工具,在软件开发中扮演着至关重要的角色。本文旨在深入解析GoF(Gang of Four,四人组)提出的23种设计...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    C++实现源码提供了具体编程环境下的应用实例,帮助读者更好地理解和应用这些设计模式。通过阅读和实践这些源码,开发者可以更深入地掌握如何在实际项目中灵活运用设计模式,提升代码质量和可维护性。

    设计模式那点事

    《设计模式那点事》这本书的PPT为我们提供了一种深入理解和学习设计模式的途径。在这里,我们将深入探讨设计模式的核心概念、分类以及它们在实际开发中的应用。 首先,设计模式基于面向对象编程思想,其核心目标是...

    设计模式精解-GoF 23种设计模式解析

    设计模式的学习和应用分为几个阶段:首先自己学会设计模式,然后将其转化为自己的语言表达出来,接着是教授他人并最终记录下来。这种学习路径要求学习者不仅要理解设计模式本身,还要具备清晰的表达能力和深刻的理解...

    24种设计模式以及混合设计模式

    通过学习和应用这些设计模式,开发者不仅可以提高代码的可读性、可维护性和可扩展性,还能提升团队间的沟通效率,因为设计模式是软件工程中的通用语言。对于任何有志于提升软件开发水平的人来说,理解和掌握设计模式...

    设计模式精解-GoF 23种设计模式解析附

    通过学习设计模式,我们可以更好地组织代码结构,提高软件质量,同时减少开发过程中的重复工作。本文将详细介绍GoF提出的23种设计模式,并提供C++实现示例,帮助读者深入理解这些模式的应用场景和技术细节。 #### ...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    设计模式-Java语言中的应用(pdf)

    通过深入学习《设计模式——Java语言中的应用》,开发者能够更好地理解和应用这些模式,从而编写出更加高效、可扩展的Java程序。无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的...

    设计模式PPT---25种设计模式详解

    这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...

Global site tag (gtag.js) - Google Analytics