简单工厂模式 simple factory
工厂方法模式 Factory method
使用工厂模式的目的在于:
对象的实例化从客户端代码中转移到非客户端代码中 -- 也就是实现 客户端和业务端的解耦
如果以 public static void main 看做是 客户端代码,那么 工厂类的模式就表示,在 main方法中,如果你要使用类A或者类B,那么在main方法中看不到 new A()或者 new B()等代码,而是在创建这些类的工厂类中才可以看到。
简单 属于类创建模式,又叫做静态工厂模式(static factory)。
使用简单工厂模式,在实际的环境中,一般有四个参与者(角色),分别:
工厂类角色:直接产品角色的调用者
抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。
具体产品角色:被工厂类创建的对象,也是客户端实际操作对象
客户端:调用工厂类产生实例,并调用实例的方法进行相应工作
包含例子如下:
package com.yp;/*** 定义 People 抽象类* @author Administrator*/public abstract class People{abstract void say();}
package com.yp;public class Chinese extends People {void say() {System.out.println("说汉语");}}
package com.yp;public class American extends People {void say() {System.out.println("Speak in English");}}
package com.yp;public class PeopleFactory {public static People create(int type) {People p = null;if (1 == type) {p = new Chinese();} else if (2 == type) {p = new American();}return p;}}
最后的测试类,也就客户端代码:
package com.yp;public class t {public static void main(String[] args) {People p = PeopleFactory.create(1);People p2 = PeopleFactory.create(2);p.say();p2.say();}}
执行结果如下:

分析:
在此模式下,客户端的角色,只能看到工厂类角色和产品抽象角色,而对产品实现角色是看不到的。
此模式的缺点:
如果在客户端中需要新的类,拿以上的例子来说,加入要增加英国人,法国人,那么除了新增实际的类来继承People之外,工厂类也必须要调整,因为工厂类目前负责匹配前台传入值和实际的类的映射关系。
