简单工厂、工厂、抽象工厂的对比

本文只讲解3中模式的对比,不讲解详情

简单工厂模式

简单工厂模式的讲解

核心方法:工厂类的CreateOperation(String),让其通过多态创造相应实例

优点: 增加各种复杂的运算时,工厂类可以封装变化,让客户端更加方便的实现运算功能。

缺点:违背开放-封闭原则

使用场景:比如实现运算功能的时候,需求可能会很多,很容易变化。假如新增某个需求,那么使用工厂模式,只需要新增继承Operation父类的子类,然后在简单工厂类中核心方法中增加case情况(switch-case)即可。

在这里插入图片描述

工厂模式

工厂模式讲解
简单工厂模式中的工厂类与分支耦合,那么根据依赖倒置原则,我们把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。然后,所有要生产具体类的工厂,就去实现这个接口,这样一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生产对象的工厂。于是,当要新增“求m的n次方”的时候,就不需要更改原有的工厂类了,只需要增加此功能的运算类和相应的工厂类就可以了

优点:这就只是扩展变了化,符合开方-封闭原则。工厂方法克服了简单工厂违背开方-封闭原则的缺点又保持了封装对象创建过程的优点降低了客户端和产品对象的耦合。工厂方法是简单工厂的进一步抽象和推广

缺点:客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的。即,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。另外,由于新增一个产品时,就需要增加一个产品工厂的类,增加了额外的开发量。
在这里插入图片描述

抽象工厂

抽象工厂详解
提供一个创建一系列相关相互依赖的接口,而无需指定它们具体的类。

扫描二维码关注公众号,回复: 5528125 查看本文章

优点易于交换产品系列,这是最大的优点。例如IFactory factory=new AccessFactory(),只在初始化的时候出现一次,这样改变一个应用的具体工厂变得很容易,只需要改变具体工厂即可使用不同的产品配置。如果现在要改变数据库访问,只需要修改具体工厂就行了

  • 让具体的创建过程和客户端分离,客户端是通过它们的抽象接口操纵实例产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。

  • 开放-封闭原则依赖倒转原则的良好运用。其实,这一点和工厂模式一样。

缺点:如果要增加一个Project项目表(一个系列),至少要添加3个类,IProject,SqlServerProject,AccessProject,还需要修改IFactory,SqlServerFactory,AccessFactory,极不方便。用反射+抽象工厂解决。

工厂模式和抽象工厂模式的区别

  • 工厂模式适合具体功能类ConcreteProductX只有一个系列的情况,例如只有一个User类和User操作类的时候。
  • 抽象工厂模式适合一个具体功能类ConcreteProductX有至少两个系列的情况,现在有很多表,而sql server和access又是不同的分类,抽象工厂模式适合解决涉及到多个产品系列的问题
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/csdnlijingran/article/details/88424777
今日推荐