我工作的那點事--學習《設計模式》例項應用(decorator模式)
上午剛好看到Decorator這個模式,為了增強學習,就將週報這個例項和它強行綁在一起了,呵呵。[@more@]
這裡還是簡單的介紹一下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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879276/viewspace-989108/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我工作的那點事--學習《設計模式》例項應用(strategy模式)設計模式
- 我工作的那點事--學習《設計模式》例項應用(Mediator模式)設計模式
- 我工作的那點事--學習《設計模式》例項應用(factory模式)設計模式
- 我工作的那點事--學習《設計模式》例項應用(Prototype模式)設計模式
- 我工作的那點事--學習《設計模式》例項應用(Builder模式)設計模式UI
- 我工作的那點事--學習《設計模式》例項應用(Observer模式)設計模式Server
- 我工作的那點事--學習《設計模式》例項應用(Singleton模式)設計模式
- 我工作的那點事--學習《設計模式》例項應用(Adapter模式)設計模式APT
- 我工作的那點事--學習《設計模式》例項應用(composite模式)設計模式
- 我工作的那點事--學習《設計模式》例項應用(Facade模式)設計模式
- Net設計模式例項之裝飾者模式(Decorator Pattern)設計模式
- 我學設計模式 之 單例模式設計模式單例
- 設計模式學習-單例模式設計模式單例
- 設計模式之Decorator在餐館中的應用設計模式
- 設計模式學習之單例模式設計模式單例
- 設計模式應用舉例設計模式
- 我的Java設計模式-單例模式Java設計模式單例
- 設計模式快速學習(三)單例模式設計模式單例
- 設計模式學習筆記——單例模式設計模式筆記單例
- JavaScript設計模式學習之單例模式JavaScript設計模式單例
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- 設計模式 (十)裝飾模式(Decorator)設計模式
- 小學生學習設計模式之單例模式設計模式單例
- 從JavaScript學習設計模式-02單例模式JavaScript設計模式單例
- 設計模式學習筆記之單例模式設計模式筆記單例
- C++學習隨筆——簡單的單例設計模式例項C++單例設計模式
- Android 設計模式の單例模式——應用最廣的模式Android設計模式單例
- Decorator裝飾設計模式設計模式
- 設計模式學習(一)單例模式補充——單例模式析構設計模式單例
- PHP設計模式- Decorator 裝飾器模式PHP設計模式
- java設計模式-裝飾器模式(Decorator)Java設計模式
- 設計模式學習筆記(九)橋接模式及其應用設計模式筆記橋接
- 設計模式學習筆記(十二)享元模式及其應用設計模式筆記
- 設計模式的征途—10.裝飾(Decorator)模式設計模式
- Java設計模式學習筆記(五) 單例模式Java設計模式筆記單例
- 設計模式學習-使用go實現單例模式設計模式Go單例
- 重學設計模式-單例模式設計模式單例