一腳踢掉NEW (轉)

amyz發表於2007-11-16
一腳踢掉NEW (轉)[@more@]


為什麼不要NEW?
如果你要問我這個問題。我想我必須答,否則你一定認為,這樣做是多餘的。好的,我來回答。首先我想說你在什麼情況用NEW,你毫無疑問的回答到。構造的時候。答的很好。聽著,如果構造的物件不是普通的物件而是相當複雜的物件。可能要從讀取資料或者還要其它附加問題呢?你要統統把他們寫入構造嗎?只能是那樣嗎?噢。。。聽著在這之前。我必須說。你違背了物件導向的封裝和派分。如果某一天你還想改變這個構造式,你是否考慮過從構問題?
如果不用NEW我們該怎麼辦?
OK。。。現在我還是我來回答。我想我要說的東西也許你早就聽過。反正我也式發些無聊的東西。是的你猜對了。工廠(Factory)一切生產都由它來完成。我們只用對它提出要求。然後它來負責構造物件。要聽它的好處嗎?不用說。上面new的缺點基本就是它的好處。還有一點。是new所無法替代的。那就是介面。工廠返回的是介面,也就是說工廠可以生產出這類工件的所有子類。可以看出是站在一個很抽象的環節上來完成任務的。
public class myFactory{
  public static ImyClass creator(string className){
  //使用動態類裝載裝入類。函式返回的是父類介面ImyClass
  swich(className){
  case : "myClassA"
    return new myClassA();
    case : "myClassB"
    return new myClassB();
    }
}
試想一下如果工廠本身也是介面意味著什麼?更高階別的抽象是那要嗎?是的。好處呢?約抽象不容易犯錯誤。
namespace FactoryMethod
{
  using System;

 class myClass
 {
 。。。。。。。read some data from database or other

 }

 abstract class myFactory
 {
 protected myClass mc;
 
 abstract public void CreateClass();

 public void Constructs()
 {
 
 // Create objects
 // . . .

 // including class
 CreateClass();
 } 
 
 }

 

 class myRealFactory : myFactory
 {
 overr public void CreateClass()
 {
 mc = new myClass(); 
 } 

 
 } 

 class myRealClass : myClass {

 }

 
  public class myClient
  {
  public static int Main(string[] args)
  {
  myFactory mf= new myRealFactory();

 mf.ConstructObjects();
  return 0;
  }
  }
}

OK一切結束。只是式寫的。不好,不祥細的地方還有很多。沒有說清楚的地方也由很多。時間倉促很抱歉。下次繼續。。。。。。


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

相關文章