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

电商网站开发的主流技术温州网站建设首选龙诚互联

电商网站开发的主流技术,温州网站建设首选龙诚互联,智慧团建在线登录,做厂房出租有那些推广网站设计模式学习(二)工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…

设计模式学习(二)工厂模式——抽象工厂模式+注册表

  • 前言
  • 使用简单工厂改进
  • 使用注册表改进
  • 参考文章

前言

在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论

使用简单工厂改进

对于缺点①,我们可以使用简单工厂的思路来改进抽象工厂的初版代码。对于上一篇文章中的例子,我们去除CameraFactoryBaslerCameraFactorySickCameraFactory,取而代之的是SimpleFactory类。

类图如下:
在这里插入图片描述
代码如下:

//工厂类
class SimpleFactory
{
public:BaslerCamera* CreateBaslerCamera(){if ("Linux" == os_name_){return new LinuxBaslerCamera();}else if ("Windows" == os_name_){return new WindowsBaslerCamera();}else{return nullptr;}}SickCamera* CreateSickCamera(){if ("Linux" == os_name_){return new LinuxSickCamera();}else if ("Windows" == os_name_){return new WindowsSickCamera();}else{return nullptr;}}
public:std::string os_name_ = "Linux";};//客户端
int main()
{SimpleFactory* camera_factory = new SimpleFactory();BaslerCamera* basler_camera = camera_factory->CreateBaslerCamera();basler_camera->OpenCamera();SickCamera* sick_camera = camera_factory->CreateSickCamera();sick_camera->OpenCamera();return 0;
}

注意,上述方法虽然改进了缺点①,但是缺点②仍存在。

使用注册表改进

对于缺点②,其本质是:增加新产品时,对工厂类带来的修改违反了开闭原则。对于这种情况,我们可以参考《设计模式学习(二)工厂模式——工厂方法模式+注册表》中提到的注册表,来去除switchif这种分支判断,解除分支判断带来的耦合。

对于具体产品,我们可以这样将它注册:

class LinuxBaslerCamera : public BaslerCamera
{
public:~LinuxBaslerCamera() override = default;bool OpenCamera() override{return true;}
};ReflectRegister("LinuxBasler", LinuxBaslerCamera);

然后工厂类的代码可以简化为:

class SimpleFactory
{
public:BaslerCamera* CreateBaslerCamera(){std::string name = os_name_ + "Basler";return Object::CreateObject<BaslerCamera>(name);}SickCamera* CreateSickCamera(){std::string name = os_name_ + "Sick";return Object::CreateObject<SickCamera>(name);}
public:std::string os_name_ = "Linux";
};

这样,在产品族增加时(比如增加一个HarmonyOS),我们只需要在它下面的产品类对应的文件中使用ReflectRegister注册,然后改变os_name_即可(当然os_name_也可以在运行时从配置文件中加载,这样更好)。

而对于现有的产品族内增加新产品(比如增加一个Huaray相机),工厂类中还是要增加一个CreateHuarayCamera函数。

参考文章

1.《大话设计模式》

http://www.yayakq.cn/news/172727/

相关文章:

  • 网站建设新闻中心有哪些网站可以免费做推广
  • 钓鱼网站制作的报告wordpress积分充值
  • html框架做网站帝国网站源码手机
  • 建设小企业网站步骤有没有代做课程设计的网站
  • 南昌网站建设 南昌做网站公司设计网站公司名称
  • 网站积分规则设计优化网站 主题
  • 自己做网站2008R2好还是win7云南高端网站建设公司
  • 做的比较好的冷柜网站有哪些苏州有哪些it大厂
  • 建行网站济南网站导航栏下面的文章
  • 网站建设的盈利性和非盈利性大学生创新项目申报书 做网站
  • 网站开发合同缴纳印花税吗济南的网站建设公司哪家好
  • 淮安高端网站制作负责加强局网站建设
  • 怎么做qq代挂网站wordpress 微商城
  • 备案号 不放在网站上宁波seo网络推广定制
  • 网站建立者西樵网站建设
  • 冀州网站建设价格wordpress nginx 301
  • 网站建设公司那个好巨鹿县住房与城乡建设厅网站
  • 做网站的时候旋转图片用python做的网站
  • 济南网站优化推广方案wordpress不懂php
  • 江门营销型网站建设网站下拉菜单
  • 网站推广中应注意哪些事项高端网站建设公司增长
  • 辽源市建设局网站区块链开发与应用专业
  • 人才网站app建设建议企业建站报价方案
  • 建网站科技公司莱州网站制作
  • 网站的关键词库关于公司网站的建设的问卷
  • 手机有软件做ppt下载网站有哪些内容吗免签支付接入wordpress
  • 专业做财经直播网站有哪些凡客家居怎么样
  • 网站设计公司行业排名六安网站设计公司
  • 建设银行电脑版官方网站西宁网站制作多少钱
  • 如何做电影网站 去哪里找片源徐州公司建站模板