简单理解三种工厂模式(简单工厂模式,工厂方法模式和抽象工厂模式)

三种工厂模式

    • 1、简单工厂模式
    • 2、工厂模式
    • 3、工厂模式实现数据访问程序
    • 4、抽象工厂模式
    • 5、抽象工厂模式和工厂方法模式的对比
    • 最后,遗留问题

工厂模式是设计模式中比较简单的一个设计模式,但很多地方都用到了工厂模式,(如解析xml中,jdbc连接数据库等)利用好工厂模式对程序的设计很有用处。

工厂模式在一些设计模式的书中分为简单工厂模式工厂方法模式抽象工厂模式 三类。也有把工厂方法模式划分到抽象工厂模式的,认为工厂方法是抽象工厂模式的特例的一种,就是只有一个要实现的产品接口。


1、简单工厂模式

简单理解三种工厂模式(简单工厂模式,工厂方法模式和抽象工厂模式)_第1张图片
(1)定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。

(2)理解:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

(3)实现方式:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

2、工厂模式


与简单工厂相比,多了抽象工厂的抽象类,避免了简单工厂过于集中的职能。


接下来简单理解一下工厂和抽象工厂的区别。

3、工厂模式实现数据访问程序

简单理解三种工厂模式(简单工厂模式,工厂方法模式和抽象工厂模式)_第2张图片
一个数据库不可能只有一个表User,还可能有更多表,比如Department(部门表)。

4、抽象工厂模式

简单理解三种工厂模式(简单工厂模式,工厂方法模式和抽象工厂模式)_第3张图片
这样就增加了,除User表以外的另一个表Department部门表。

5、抽象工厂模式和工厂方法模式的对比

工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例。

区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个

内容出处:https://blog.csdn.net/ugfffj/article/details/84039091


最后,遗留问题

运用抽象工厂模式,但是问题又来啦,还可能会增加第三个表Project项目表,至少就要增加三个类IProject,SqlserverProject,AccessProject,还要修改 IFactory,SqlserverFactory,AccessFactory 才可以实现。

更何况,在一个工程中可能会有几百次IFactory=new SqlserverFactory()等,这会导致批量的改动,是不合理的。


下篇博客让我们学习一下 抽象工厂模式 ,并一步步分析和解决上面 这些问题。


你可能感兴趣的:(设计模式,简单工厂模式,工厂方法模式,抽象工厂模式)