工厂模式是设计模式中比较简单的一个设计模式,但很多地方都用到了工厂模式,(如解析xml中,jdbc连接数据库等)利用好工厂模式对程序的设计很有用处。
工厂模式在一些设计模式的书中分为简单工厂模式,工厂方法模式 和 抽象工厂模式 三类。也有把工厂方法模式划分到抽象工厂模式的,认为工厂方法是抽象工厂模式的特例的一种,就是只有一个要实现的产品接口。
1、简单工厂模式
(1)定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。
(2)理解:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
(3)实现方式:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
2、工厂模式
与简单工厂相比,多了抽象工厂的抽象类,避免了简单工厂过于集中的职能。
接下来简单理解一下工厂和抽象工厂的区别。
3、工厂模式实现数据访问程序
一个数据库不可能只有一个表User,还可能有更多表,比如Department(部门表)。
4、抽象工厂模式
这样就增加了,除User表以外的另一个表Department部门表。
5、抽象工厂模式和工厂方法模式的对比
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个
内容出处:https://blog.youkuaiyun.com/ugfffj/article/details/84039091
最后,遗留问题
运用抽象工厂模式,但是问题又来啦,还可能会增加第三个表Project项目表,至少就要增加三个类IProject,SqlserverProject,AccessProject,还要修改 IFactory,SqlserverFactory,AccessFactory 才可以实现。
更何况,在一个工程中可能会有几百次IFactory=new SqlserverFactory()等,这会导致批量的改动,是不合理的。
下篇博客让我们学习一下 抽象工厂模式 ,并一步步分析和解决上面 这些问题。