题外话:我们在编程的时候为什么要考虑使用设计模式,为什么那么多人都对设计模式痴迷,我觉得无非就是为了使我们的代码更加灵活,这表现在易维护、可复用、可扩展、低耦合。
 
工厂模式有:工厂方法和抽象工厂,工厂方法又有简单工厂方法和工厂方法。
意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method 使一个类的实例化延迟到其子类。
适用性:当一个类不知道它所必须创建的对象的类的时候。
                  当一个类希望由它的子类来指定它所创建的对象的时候。
         当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪
   个帮助子 类是代理者这一信息局部化的时候。
 
其实我对于工厂方法简单的理解就是我下面代码的体现(不同的模式,对应不同的代码类):
简单工厂方法:有一个工厂类专门用来创建一类产品的实例,一般是单个的实例;
简单工厂涉及的类如下:
 
产品接口类及相关类:
 
User.java
UserOperation.java
 
简单工厂类:
SimpleFactory.java
 
具体产品类:
SqlServerUserOperation.java
OracleUserOperation.java 
 
客户端类:
Client.java
 
工厂方法:定义一个用于创建对象的接口(将简单工厂的工厂类变成接口,接口中含有创建对象的方法),让子类决定实例化(创建)哪一个类 ( 产品 ) 。工厂方法使一个类的实例化延迟到其子类。满足开放 - 封闭原则;
工厂方法涉及的类如下:
 
工厂方法类:
FactoryMethod.java
 
工厂方法两个实现类:
OracleUserFactory.java
SqlserverUserFactory.java 
 
客户端类:
Client.java
 
简单工厂与工厂方法的区别:简单工厂的好处就是工厂类中包含了根据客户端的选择来实例化具体对象的逻辑,脱离了客户端对具体产品的依赖。工厂方法将实例化哪个类的判断逻辑转移到客户端来判断了。
抽象工厂方法:提供一个创建一系列相关或依赖对象的接口 ( 工厂类 ) ,也就是可以创建多个产品接口的实例,创建一系列的实例组,这些实例彼此相关。
抽象工厂涉及的类如下
增加一个产品:
Department.java
DepartmentOperation.java
 
具体产品类:
OracleDepartmentOperation.java
SqlserverDepartmentOperation.java
 
抽象工厂类:
AbstractFactory.java
 
两个抽象工厂实现类:
AbstractFactoryOrclConcrete.java
AbstractFactorySqlConcrete.java
客户端类:
Client.java
 
 
代码下载见附件