欧美V国产V亚洲V日韩九九_国产偷V国产偷V亚洲高清_蜜桃精品免费久久久久影院_亚洲男同志Gay 片可播放

剛開始編程時,沒有經驗,往往在一個方法里把所有的功能實現。
比如一個打印報表的模塊,在實現時(shi):

public class printReport
{
  public void print(){
    //打印表頭
   //打印正文
    //打印表尾
  }
}

這樣客戶端調(diao)用(yong)的時候(hou),直(zhi)接new printReport()對象,然后調(diao)用(yong)print方法。現在看起來沒(mei)什么問題,可(ke)是需求變化時,就麻煩了。

比如客(ke)戶打(da)印(yin)表頭要(yao)改一(yi)(yi)下(xia),怎么辦,改原來(lai)(lai)的(de)(de)類(lei)?那(nei)如果客(ke)戶又(you)覺的(de)(de)原來(lai)(lai)的(de)(de)格式(shi)好(hao)要(yao)換回(hui)原來(lai)(lai)的(de)(de)表頭呢?這時候恐怕就要(yao)郁(yu)悶了。那(nei)怎么辦呢?仔細分析發現(xian)打(da)印(yin)次序(xu)是(shi)不變(bian)的(de)(de),客(ke)戶具(ju)體的(de)(de)打(da)印(yin)內容是(shi)經常(chang)變(bian)化的(de)(de),這樣(yang)我們改造一(yi)(yi)下(xia)類(lei):

public abstract class printReport
{ //定義一個抽象類
  public void print(){
    printHeader(); //打印抬頭
    printBody();  //打印正文
    printFooter(); //打印表尾
  }
 
  public abstract void printHeader();
  public abstract void printBody();
  public abstract void printFooter();
}

這(zhe)個(ge)框(kuang)架就是把打(da)印的3個(ge)方法固定了,但(dan)是沒(mei)有具(ju)體的打(da)印實現,因為客戶(hu)的要求會(hui)變,所以這(zhe)里將(jiang)可變的部分(fen)抽離,留給(gei)子類(lei)去實現。

比如客戶A的打印(yin)是這樣的


public class printClientAReport:printReport //繼承
{
 
  public  void printHeader()
  {
      console.writeln("客戶A的抬頭打印");
  }
  public  void printBody()
  {
      console.writeln("客戶A的正文打印");   
  }
  public  void printFooter()
  {
      console.writeln("客戶A的表尾打印");   
  }
}

這樣在客戶代碼
printClientAReport p=new printClientAReport();
p.print();

客戶b的不一樣
public class printClientBReport:printReport //繼承
{
 
  public  void printHeader()
  {
      console.writeln("客戶B的抬頭打印");
  }
  public  void printBody()
  {
      console.writeln("客戶B的正文打印");   
  }
  public  void printFooter()
  {
      console.writeln("客戶B的表尾打印");   
  }
}

客戶B的打印
printClientBReport p=new printClientBReport();
p.print();
這其實就是最簡單的模板模式。

======================================================
在實際(ji)的打印(yin)文檔項(xiang)目(mu)中,有一個打印(yin)處理模塊,應用了模板設計(ji)模式。

 

1,定義一個(ge)打(da)印文檔處(chu)理抽象類,里面BuildNewSql() 和 Process()實現了具(ju)體的(de)流程。

2,Word的打印文檔處理。

3,Excel的打印文檔處理(li)


 

在具體業務處理時:

excel處理

 ExcelProcess xls = new ExcelProcess(u,v,w,x,y);
 xls.initProcess();
 xls.Save(newname);

word處理

 WordProcess wp = new WordProcess(u,v,w,x,y);
 wp.initProcess();
 wp.Save(newname);