日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式理解:工厂模式,抽象工厂,原型方法

發布時間:2024/10/14 asp.net 128 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式理解:工厂模式,抽象工厂,原型方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?工廠模式、抽象工廠、原型方法都是對象創建型模式。工廠模式的目的是利用抽象類去動態地創建對象;抽象工廠模式是利用抽象類動態地創建一系列的對象;而原型方法是通過克隆(深拷貝)地形式創建出對象 ,再去操作新創建的對象,而不去修改原型內容。

工廠方法,將要創建的對象內容該由外部參數決定,而內部程序不需要考慮具體初始化哪個實體對象。例如如果要擴展Oracle的連接實體類,只需要再擴展DBFactory即可。當然,如果把createConnection設置成虛函數,那么就可以對IconnectionFactory進行擴展,例如還可以創建網絡連接工廠類等。

enum ConnectId {SQLSEVER,ORACLE,MYSQL} class IconnectionFactory{ public:virtual Iconnection * createConnection(ConnectId ) = 0; } class DBFactory:public IconnectionFactory{ public:virtual Iconnection * createConnection(ConnectId id){switch(id){case SQLSEVER:return new SQLSeverConnection();case MYSQL:return new MYSQLConnection();.....}}; } class Iconnection{ }class SQLSeverConnection:public Iconnection{ } class MYSQLConnection:public Iconnection{ } ///------當實體類擴展時主函數可以保持不變--------void Process(ConnectId cid ){DBFactorydbfactory;Iconnection* iconnect = dbfactory.createConnection(cid); }

而抽象工廠方法是為了創建一系列的對象,這一系列的對象有一定的關聯性,抽象工廠做法就是把各自的工廠封裝在同一個種。例如 SQLCommand 可 SQLConnection 數據庫類型必須要保持一致。

enum ConnectId {SQLSEVER,ORACLE,MYSQL} class DBFactory{ public:virtual Iconnection * createConnection(ConnectId id){switch(id){case SQLSEVER:return new SQLSeverConnection();case MYSQL:return new MYSQLConnection();.....}}virtual ICommand* createICommand(ConnectId id){switch(id){case SQLSEVER:return new SQLSeverCommand();case MYSQL:return new MYSQLCommand();.....}} }class Iconnection{ } class ICommand{ }class SQLSeverConnection:public Iconnection{ } class MYSQLConnection:public Iconnection{ } class SQLSeverCommand:public ICommand{ } class MYSQLCommand:public ICommand{ } ///------當實體類擴展時主函數可以保持不變--------void Process(ConnectId cid ){DBFactory dbfactory;Iconnection* iconnect = dbfactory.createConnection(cid);ICommand* icommand = dbfactory.createICommand(cid) }

原型模式:通過深拷貝克隆出一個新的對象,將要創建的對象類型交給外部參數處理。通常還需要實現拷貝構造函數。

class ISplitter{ public:virtual void split() = 0;virtual ISplitter * clone()=0;virtual ~ISplitter(){} }class FileSplitter : ISplitter(){virtual void split(){ ...}ISplitter * clone() { return new FileSplitter (*this);} } class HTMLSplitter : ISplitter(){virtual void split(){ ...}ISplitter * clone() { return new HTMLSplitter (*this);} } //---------------void Process(ISplitter prototype){ISplitter * splitter = prototype->clone();..... }

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的设计模式理解:工厂模式,抽象工厂,原型方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。