当前位置: 首页 > news >正文

哈尔滨网站设计哪家公司好个人主页简介

哈尔滨网站设计哪家公司好,个人主页简介,.net 快速网站开发,vue大型网站怎么做路由设计模式的目的就是尽量减少“变化”对程序的影响#xff0c;尤其是对客户程序的影响。AbstractFactory模式作为创建型模式的一种#xff0c;解决的就是“new”在变化中可能引起的问题。 先来看看new有何种不好#xff0c;举个创建汽车的车门的例子#xff1a; 很自然的一… 设计模式的目的就是尽量减少“变化”对程序的影响尤其是对客户程序的影响。AbstractFactory模式作为创建型模式的一种解决的就是“new”在变化中可能引起的问题。 先来看看new有何种不好举个创建汽车的车门的例子 很自然的一种想法是Door *door new Door(); 但是如果遇到创建老爷车的车门创建现代车的车门这段代码就无所适从了。 OO为我们提供了哪些精华的思想“封装”是的将车门的创建封装起来于是我们有了静态工厂方法  客户程序代码 1Door* door  doorFactory-CreateDoor();库程序代码 1class DoorFactory 2{ 3public: 4  Door* CreateDoor() 5  { 6    return new Door(); 7  } 8}客户程序在此是不会变化的不管你是老爷车门现代车门还是钻石车门这些和客户程序代码都是没关系的究竟CreateDoor出来如何结果都交给多态来判断我们不用操心。 但是库程序代码还是需要更改的但我们已经将“变化”与客户程序隔离了。 需求又有变化了不光要创建车门还需要创建引擎车灯而且还是不同风格的。 这时候静态工厂已经应付不来了静态工厂有其自身的缺陷“不能应对不同系列对象”的变化。 动机 软件系统中经常面临“一系列相互依赖的对象”的创建工作。两个特征“一系列”“相互依赖” 将创建过程封装起来避免“客户程序”和“多系列具体对象的创建工作”的紧耦合。 意图 提供一个接口让该接口负责创建一系列“相关或者相互依赖的对象”无需指定他们具体的类。GoF23 思路 对于客户程序来说只依赖于三个抽象的类AbstractFactoryAbstractProductAAbstractProductB。 以下是客户程序代码 1class CarManager  2{  3protected:  4    AbstractFactory *abstractFactory;  5public:  6    //创造Car  7    void createCar(AbstractFactory *abstractFactory)  8    {  9        abstractFactory-CreateEngine(); 10        abstractFactory-CreateDoor(); 11        abstractFactory-CreateLight(); 12    } 13    //其他的操作 14    void run(){} 15}; 16 17int _tmain(int argc, _TCHAR* argv[]) 18{ 19    CarManager *carManager  new CarManager(); 20    //创建Classic风格的汽车 21    carManager-createCar(new ClassicFactory()); 22 23    return 0; 24}所有关于创建的操作都是用抽象类完成的对于具体是何种类型的对象由多态实现以此来使“客户代码”和“多系列具体对象的创建工作”达到松耦合。 如果遇到还需要扩展其他风格的汽车可以按下图的思路 红色的部分对应新风格的车辆只需在库程序中添加ConcreteFactory3,ProductA3,ProductB3三个类而对于客户代码CarManager来说完全不受影响。 总结 AbstractFactory模式有以下三个要点 1.应对的问题是“多风格的系列对象创建”的变化问题“系列对象”指的是这些对象之间有相互依赖或者相互作用的关系。否则使用“静态工厂”足以。 2.抽象工厂和静态工厂的核心是“封装”将对象的创建进行封装避免“new”引起的问题 3.抽象工程的另一个核心是“多态”通过动态绑定来处理“不同风格”的问题 注 AbstractFactory模式主要针对“风格”的变化如果“对象”本身经常变化那么该模式并不适用。 自己做的示例代码仅供参考 1//   2// AbstractFactoryTest for AbstractFactory Pattern Test   3//   4//   5   6#include stdafx.h   7#include iostream   8using namespace std;   9  10//Engine,Door,Light are the Abstract Product  11//这三个类对应UML图中的AbstractProduct类  12class Engine  13{  14public:  15    Engine()  16    {  17        coutAbstract Engine Createendl;  18    }  19    virtual void doSomething()  0;  20};  21  22class Door  23{  24public:  25    Door()  26    {  27        coutAbstract Door Createendl;  28    }  29    virtual void doSomething()  0;  30};  31  32class Light  33{  34public:  35    Light()  36    {  37        coutAbstract Light Createendl;  38    }  39    virtual void doSomething()  0;  40};  41  42//Abstract Factory  43class AbstractFactory  44{  45public:  46    AbstractFactory()  47    {  48        coutAbstractFactory Createendl;  49    }  50    virtual Engine* CreateEngine()  0;  51    virtual Door* CreateDoor()  0;  52    virtual Light* CreateLight()  0;  53};  54  55//SpeedEngine,SpeedDoor,SpeedLight are the Products of Speed Style   56//这三个类对应UML图中的ProductA1ProductB1ProductC1类  57class SpeedEngine:public Engine  58{  59public :  60    SpeedEngine()  61    {  62        coutSpeed Engine Createendl;  63    }  64    void doSomething(){    }  65};  66  67class SpeedDoor:public Door  68{  69public :  70    SpeedDoor()  71    {  72        coutSpeed Door Createendl;  73    }  74    void doSomething(){    }  75};  76  77class SpeedLight:public Light  78{  79public :  80    SpeedLight()  81    {  82        coutSpeed Light Createendl;  83    }  84    void doSomething(){    }  85};  86  87//classicEngine,classicDoor,classicLight are the products of Classic style  88//这三个类对应UML图中的ProductA2ProductB2ProductC2类  89class ClassicEngine:public Engine  90{  91public :  92    ClassicEngine()  93    {  94        coutClassic Engine Createendl;  95    }  96    void doSomething(){    }  97};  98  99class ClassicDoor:public Door 100{ 101public : 102    ClassicDoor() 103    { 104        coutClassic Door Createendl; 105    } 106    void doSomething(){    } 107}; 108 109class ClassicLight:public Light 110{ 111public : 112    ClassicLight() 113    { 114        coutClassic Light Createendl; 115    } 116    void doSomething(){    } 117}; 118 119//Factory for Speed Cars 120//对应UML图中的ConcreteFactory1类 121class SpeedFactory:public AbstractFactory 122{ 123public: 124    SpeedFactory() 125    { 126        coutSpeedFactory Createendl; 127    } 128    virtual Engine* CreateEngine() 129    { 130        return new SpeedEngine(); 131    } 132    virtual Door* CreateDoor()  133    { 134        return new SpeedDoor(); 135    } 136    virtual Light* CreateLight() 137    { 138        return new SpeedLight(); 139    } 140}; 141 142//Factory for classic Cars 143//对应UML图中的ConcreteFactory2类 144class ClassicFactory:public AbstractFactory 145{ 146public: 147    ClassicFactory() 148    { 149        coutClassicFactory Createendl; 150    } 151    virtual Engine* CreateEngine() 152    { 153        return new ClassicEngine(); 154    } 155    virtual Door* CreateDoor()  156    { 157        return new ClassicDoor(); 158    } 159    virtual Light* CreateLight() 160    { 161        return new ClassicLight(); 162    } 163}; 164 165//Client Code ---- use the Abstract Factory  Abstract Product to create the car 166//this is never changed 167class CarManager 168{ 169protected: 170    AbstractFactory *abstractFactory; 171public: 172    //创造Car 173    void createCar(AbstractFactory *abstractFactory) 174    { 175        abstractFactory-CreateEngine(); 176        abstractFactory-CreateDoor(); 177        abstractFactory-CreateLight(); 178    } 179    //其他的操作 180    void run(){} 181}; 182 183int _tmain(int argc, _TCHAR* argv[]) 184{ 185    CarManager *carManager  new CarManager(); 186    //创建Classic风格的汽车 187    carManager-createCar(new ClassicFactory()); 188 189    return 0; 190}
http://www.pierceye.com/news/451235/

相关文章:

  • 吉林省建设厅证件查询网站网站不备案什么意思
  • 怎么查wordpress主题鞍山seo优化
  • 文字网站和图片网站哪个难做大城县建设局网站
  • 网站的二级目录是什么怎么把网站和域名绑定
  • 佛山营销网站建设wordpress请求超时
  • wordpress今天更新文章数漳州网站优化
  • 开发公司房产销售合同中必须明确哪些事项?seo网站推广全程实例
  • asp网站水印支除网络营销与市场营销的关系
  • 方圆网 网站建设wordpress 首页 不显示归档
  • 网站关键词怎么快速上排名wordpress极慢
  • 摄影网站建站wordpress怎么改密码
  • 旅游网站制作过程百度收录查询入口
  • 简述企业网站建设的流程网站建设的需求分析报告
  • 做网络课程的网站聚美优品网站建设分析
  • 网站建设公司简介wordpress注册按钮
  • 网站的栏目建设在哪里惠州网
  • 免费建站模板哪个好核酸造假7人枪毙视频
  • 一手房哪个网站做信息效果好微信小程序打不开
  • 建设网站图片素材包头怎样做网站
  • 网站内容建设与管理90设计app下载
  • 怎么做优惠卷网站公司做网站大概多少钱
  • 哪些网站是单页面应用程序在线做网站流程
  • 公司网站设计维护官方网站建设需要做哪些东西
  • 网站被k还能不能在百度做推广wordpress主题网址导航葬爱
  • 成都网站制作和建设辽阳北京网站建设
  • 合肥金融网站设计网页制作工具分哪两类
  • 专业营销型网站定制wordpress菜单绑定模板
  • 网站建设公司找哪家好石家庄网站改版
  • 建立一个网站要多久网页界面ps制作步骤
  • 珠海网站建设费用自己做网站切入地图