一腳踢掉NEW (轉)
為什麼不要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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【轉】placement new
- 700bike:我們要做腳踏車界的New Balance
- The New C++ (轉)C++
- 終端登入被互相踢掉,思路分析
- 理解new和實現一個new
- 【轉】cannot allocate new log
- 踢掉 FB+PL:Apache 的開源激進宣言?Apache
- new static ,new self ,self::, $this的一些理解
- new 了一個 FunctionFunction
- 轉:malloc VS new, free VS deletedelete
- 一隻腳踏入 Three.jsJS
- What's New in the JMF 2.0 Reference Implementations (轉)
- 對硬碟的一種簡單加密----在分割槽表上做手腳. (轉)硬碟加密
- New start new hope!
- 一步一步搭建腳手架
- malloc/free 和 new /delete 的區別 (轉)delete
- 搭建一個通用的腳手架
- 智慧汽車浪潮 微軟也要插一腳微軟
- new self()與new static()
- new Child();new Child(1);
- Oracle初始化引數設定new(轉)Oracle
- 分享一個springboot腳手架Spring Boot
- 如何開發一個Node腳手架
- Vue 原始碼分析系列一:new Vue()Vue原始碼
- New
- 課程:A New History for a New China, 1700-2000: New Data and New Methods, Part 1
- New轉乾坤——雲網融合真正的開啟方式!
- New I/0 Functionality for JavaTM 2 Standard Edition 1.4 (轉)FunctionJava
- JavaScript中的new map()和new set()使用詳細(new map()和new set()的區別)JavaScript
- 前端如何搭建一個成熟的腳手架前端
- 如何自己開發一個腳手架工具
- 用腳手架搭建一個 vue 專案Vue
- 自己搭建一個vue專案(腳手架)Vue
- 一文快速上手-Vue CLI腳手架Vue
- 腳踏車
- new learn
- A New Start
- placement new