简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(或者父接口)。
简单工厂模式的 UML 图:
(1)抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
(2)具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。
(3)工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
代码:
(1)抽象产品角色:
package com.liwei.factory.simple; /** * 抽象(Product)产品角色 * 负责描述所有实例的公共接口 * @author Administrator * */ public interface Doll { public void getInfo(); }
(2)具体产品角色
package com.liwei.factory.simple; public class BarbieDoll implements Doll { @Override public void getInfo() { System.out.println("我是芭比娃娃"); } }
package com.liwei.factory.simple; public class ClothDoll implements Doll { @Override public void getInfo() { System.out.println("我是布娃娃"); } }
(3)工厂角色:
package com.liwei.factory.simple; public class DollFactory { public static Doll getInstance(String name){ if("barbie".equals(name)){ return new BarbieDoll(); }else if("cloth".equals(name)){ return new ClothDoll(); }else{ return null; } } }
(4)测试类:
package com.liwei.factory.simple; public class Client { public static void main(String[] args) { Doll doll1 = DollFactory.getInstance("cloth"); doll1.getInfo(); Doll doll2 = DollFactory.getInstance("barbie"); doll2.getInfo(); } }
由原来的直接依赖,变为依赖工厂了。只是把依赖关系转移了。