简单工厂模式(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();
}
}
由原来的直接依赖,变为依赖工厂了。只是把依赖关系转移了。