ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

设计模式8——工厂方法(Factory Method)

设计模式8——工厂方法(Factory Method) 一、动机在软件系统中经常面临着创建对象的工作由于需求的变化需要创建的对象的具体类型经常变化。Product*pnewProductA();代码直接写死new ProductA如果以后新增产品ProductB要到处改业务代码业务代码和具体类强耦合。二、模式定义定义一个用于创建对象的接口让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——《设计模式》GoF三、例子#includeiostream// 抽象产品classProduct{public:virtual~Product()default;virtualvoidshow()0;};// 具体产品AclassProductA:publicProduct{public:voidshow()override{std::cout产品A\n;}};// 具体产品BclassProductB:publicProduct{public:voidshow()override{std::cout产品B\n;}};// 【抽象工厂】工厂方法纯虚函数createProductclassFactory{public:virtual~Factory()default;virtualProduct*createProduct()0;// 工厂方法};// A的工厂只生产ProductAclassFactoryA:publicFactory{public:Product*createProduct()override{returnnewProductA();}};// B的工厂只生产ProductBclassFactoryB:publicFactory{public:Product*createProduct()override{returnnewProductB();}};// 业务代码只依赖抽象Factory、抽象Product不碰new具体类intmain(){Factory*facnewFactoryA();Product*objfac-createProduct();obj-show();deleteobj;deletefac;return0;}五、总结Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型紧耦合关系会导致软件的脆弱。Factor Method模式通过面向对象的手法将所要创建的具体对象工作延迟到子类从而实现一种扩展(而非更改)的策略较好的解决了这种紧耦合关系。Factor Method模式解决“单个对象”的需求变化。缺点在于要求创建方法/参数相同。多说一点其实是可以在第一种方法的框架类定义一个文件分割的基类指针构造函数中传入文件分割的继承类对象不过这就不是工厂方法了而是我们之前说过的模板方法。类似的可以使用表驱动的方式去解决这种问题。事件映射函数指针的方式.
返回列表