欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > asp.net >内容正文

asp.net

设计模式理解:工厂模式,抽象工厂,原型方法 -ag凯发k8国际

发布时间:2024/10/14 asp.net 30 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 设计模式理解:工厂模式,抽象工厂,原型方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

       工厂模式、抽象工厂、原型方法都是对象创建型模式。工厂模式的目的是利用抽象类去动态地创建对象;抽象工厂模式是利用抽象类动态地创建一系列的对象;而原型方法是通过克隆(深拷贝)地形式创建出对象 ,再去操作新创建的对象,而不去修改原型内容。

工厂方法,将要创建的对象内容该由外部参数决定,而内部程序不需要考虑具体初始化哪个实体对象。例如如果要扩展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年技术见证,附赠技术全景图

总结

以上是ag凯发k8国际为你收集整理的设计模式理解:工厂模式,抽象工厂,原型方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图