我工作的那點事--學習《設計模式》例項應用(Builder模式)

biqing0427發表於2007-11-23
今天無意中在抽屜裡發現以前的工資條,看見上面的各項:基本工資,車貼,飯貼,交通費,養老保險,醫療保險,失業保險,住房公積金,個稅,等等……。突然想到 Builder這個模式[@more@]

Builder模式定義:將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示.Builder模式是一步一步建立一個複雜的物件,它允許使用者可以只透過指定複雜物件的型別和內容就可以構建它們.

今天無意中在抽屜裡發現以前的工資條,看見上面的各項:基本工資,車貼,飯貼,交通費,養老保險,醫療保險,失業保險,住房公積金,個稅,等等……。突然想到 Builder這個模式,其實從這個工資條上也可以看出,

1.到手的工資額:工資的貨幣價格體現,是個Product

2.工資條的各部分實現:builder,裡面包括 基本工資,車貼,飯貼,交通費,養老保險,醫療保險,失業保險,住房公積金,個稅 各部門。
為了簡單說明 只有只歸納為:補貼,保險,個稅,基本工資 四個部分

3.會計:Director 決定每個月你那些部分要進行計算。

具體實現過程如下:

1.構建工資條的各部分實現:Builder

public interface Builder {

  //建立補貼部分
void buildPartOtherFee(double money);

  //建立保險部分
  void buildPartInsuranc(double money);

  //建立基本工資部分
  void buildPartBaseSalary(double money);

  //建立個稅部分
  void buildPartTax(double money);

//得到最終工資
  double getTrueSalary();
}

2.具體實現類,根據相關法律規定各部分的實現情況 以及最後工資的組裝
public class ConcreteBuilder implements Builder {

double partOtherFee = 0;
double partInsuranc = 0;
double partBaseSalary = 0;
double partTax = 0;
  //建立補貼部分
  void buildPartOtherFee(double money){
partOther = money;
};

  //建立保險部分
void buildPartInsuranc(double money){

double houseFond = money * 0.07;//住房公積金
double futureFond = money * 0.08;//養老保險
double medicalFond = money * 0.02;//醫療保險
double loseWorkFond = money * 0.01;//失業保險

partInsuranc = houseFond + futureFond + medicalFond + loseWorkFond;

};

  //建立基本工資部分
  void buildPartBaseSalary(double money){
partBaseSalary = money;
};

  //建立個稅部分
  void buildPartTax(double money){
double tempMoney;
/*
一系列計算公式後
*/
partTax = tempMoney;
};

//得到最終工資
  double getTrueSalary(){
//組裝過程
return partBaseSalary + partOtherFee - partInsuranc - partTax;
};
}

3. 看看會計將覺得怎麼算你的工資

public class Director {

  private Builder builder;

  public Director( Builder builder ) {
    this.builder = builder;
  }

  //這裡是將各部分計算,得到最後工資的過程
  public void construct(double base,double other) {
    builder.buildPartOtherFee(other);//給你補貼
    builder.buildPartInsuranc(base);//給你保險:注意這裡有可能不給你哦:)
    builder.buildPartBaseSalary(base);
builder.buildPartTax(base);//這個是必須的,給國家貢獻嘛
  }
}

4. 下面就開始發工資了,呵呵:
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct(10000,1000);//給你一個月1w,1k 補貼 爽啊
double trueSalary = builder.getResult(); //最後真正到手的工資,發現原來還是那麼少。

參考:板橋里人

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879276/viewspace-983346/,如需轉載,請註明出處,否則將追究法律責任。

相關文章