星空网 > 软件开发 > ASP.net

Factory Method(工厂方法)

1.意图

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

2.动机

    框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。

3.适用性

  • 当一个类不知道它所必须创建的对象的类的时候。
  • 当一个类希望由它的子类来指定它所创建的对象的时候。
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一局部化的时候。

4.结构

         Factory Method(工厂方法)

5.代码实例

    

Factory Method(工厂方法)Factory Method(工厂方法)
class Product{public:  virtual ~Product() = 0;};class OneProduct : public Product{public:  OneProduct();};class TwoProduct : public Product{public:  TwoProduct();};class ThreeProduct : public Product{public:  ThreeProduct();};class FourProduct : public Product{public:  FourProduct();};

Product.h
Factory Method(工厂方法)Factory Method(工厂方法)
#include <memory>class Product;class Creator{public:  virtual std::shared_ptr<Product> FactoryMethod() = 0;};class OneCreator : public Creator{public:  std::shared_ptr<Product> FactoryMethod();};class TwoCreator : public Creator{public:  std::shared_ptr<Product> FactoryMethod();};class ThreeCreator : public Creator{public:  std::shared_ptr<Product> FactoryMethod();};class FourCreator : public Creator{public:  std::shared_ptr<Product> FactoryMethod();};

Creator.h
Factory Method(工厂方法)Factory Method(工厂方法)
#include "Product.h"#include <iostream>Product::~Product(){}OneProduct::OneProduct(){  std::cout << "OneProduct Created" << std::endl;}TwoProduct::TwoProduct(){  std::cout << "TwoProduct Created" << std::endl;}ThreeProduct::ThreeProduct(){  std::cout << "ThreeProduct Created" << std::endl;}FourProduct::FourProduct(){  std::cout << "FourProduct Created" << std::endl;}

Product.cpp
Factory Method(工厂方法)Factory Method(工厂方法)
#include "Creator.h"#include "Product.h"std::shared_ptr<Product> OneCreator::FactoryMethod(){  auto pProduct = std::shared_ptr<Product>(new OneProduct());  return pProduct;}std::shared_ptr<Product> TwoCreator::FactoryMethod(){  auto pProduct = std::shared_ptr<Product>(new TwoProduct());  return pProduct;}std::shared_ptr<Product> ThreeCreator::FactoryMethod(){  auto pProduct = std::shared_ptr<Product>(new ThreeProduct());  return pProduct;}std::shared_ptr<Product> FourCreator::FactoryMethod(){  auto pProduct = std::shared_ptr<Product>(new FourProduct());  return pProduct;}

Creator.cpp
Factory Method(工厂方法)Factory Method(工厂方法)
#include<memory>#include"Creator.h"int main(){  auto pOneCreator = std::shared_ptr<OneCreator>(new OneCreator());  auto pOneProduct = pOneCreator->FactoryMethod();  auto pTwoCreator = std::shared_ptr<TwoCreator>(new TwoCreator());  auto pTwoProduct = pTwoCreator->FactoryMethod();  auto pThreeCreator = std::shared_ptr<ThreeCreator>(new ThreeCreator());  auto pThreeProduct = pThreeCreator->FactoryMethod();  auto pFourCreator = std::shared_ptr<FourCreator>(new FourCreator());  auto pFourProduct = pFourCreator->FactoryMethod();  while(1);}

Test.cpp

6.测试结果

Factory Method(工厂方法)

7.效果

  • 优点:代码仅处理Product接口,不再绑定特定的ConcreteProduct。
  • 缺点:一个工厂方法仅创建一种产品,创建特定的ConcreteProduct需要创建Creator的子类。

8.变形

    工厂方法的变形是:可以参数化工厂方法,以使工厂方法可以创建多种产品。

 




原标题:Factory Method(工厂方法)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

跨境电商美业:https://www.goluckyvip.com/tag/9051.html
邮寄 马来西亚:https://www.goluckyvip.com/tag/90510.html
物流马来西亚吉隆坡:https://www.goluckyvip.com/tag/90511.html
东西快递到马来西亚:https://www.goluckyvip.com/tag/90512.html
出口马来西亚的物流:https://www.goluckyvip.com/tag/90513.html
货运马来西亚物流:https://www.goluckyvip.com/tag/90514.html
字节跳动辟谣!TikTok收紧美国开店政策为不实信息:https://www.kjdsnews.com/a/1836537.html
字节跳动辟谣!TikTok收紧美国开店政策为不实信息:https://www.goluckyvip.com/news/188212.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流