999在线视频精品免费播放观看-国产在线观看无码免费视频-漂亮人妻被中出中文字幕-国产精品妇女一二三区

剛開始編程時(shí),沒有經(jīng)驗(yàn),往往在一個(gè)方法里把所有的功能實(shí)現(xiàn)。
比如一個(gè)打印報(bào)表的模塊,在實(shí)現(xiàn)時(shí):

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

這樣客戶端調(diào)用的時(shí)候,直接new printReport()對象,然后調(diào)用print方法,F(xiàn)在看起來沒什么問題,可是需求變化時(shí),就麻煩了。

比如客戶打印表頭要改一下,怎么辦,改原來的類?那如果客戶又覺的原來的格式好要換回原來的表頭呢?這時(shí)候恐怕就要郁悶了。那怎么辦呢?仔細(xì)分析發(fā)現(xiàn)打印次序是不變的,客戶具體的打印內(nèi)容是經(jīng)常變化的,這樣我們改造一下類:

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

這個(gè)框架就是把打印的3個(gè)方法固定了,但是沒有具體的打印實(shí)現(xiàn),因?yàn)榭蛻舻囊髸?huì)變,所以這里將可變的部分抽離,留給子類去實(shí)現(xiàn)。

比如客戶A的打印是這樣的


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();
這其實(shí)就是最簡單的模板模式。

======================================================
在實(shí)際的打印文檔項(xiàng)目中,有一個(gè)打印處理模塊,應(yīng)用了模板設(shè)計(jì)模式。

 

1,定義一個(gè)打印文檔處理抽象類,里面BuildNewSql() 和 Process()實(shí)現(xiàn)了具體的流程。

2,Word的打印文檔處理。

3,Excel的打印文檔處理


 

在具體業(yè)務(wù)處理時(shí):

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);