一、定义
简单工厂模式,依据传入的参数,生成对应的具体产品对象。简单工厂模式属于创建型模式,又称为静态工厂方法模式,但不属于23种模式之一。
二、要点
工厂方法一般设为静态方法;
返回值一般是是抽象类或者接口;
具体的产品类一般继承或实现抽象类、接口。
三、类图
四、简单工厂模式代码
1、Product类:抽象产品类,负责定义产品的共性
package simpleFactory;
/**
* 抽象产品类,负责定义产品的共性
*/
public abstract class Product {
private String attribute;
public void method1(){
System.out.println("Product do something!");
}
public abstract void method2();
}
2、ConcreteProduct1类:具体产品类
package simpleFactory;
/**
* 具体产品类
*/
public class ConcreteProduct1 extends Product {
public void method2(){
System.out.println("ConcreteProduct1 do something!");
}
}
3、ConcreteProduct2类:具体产品类
package simpleFactory;
/**
* 具体产品类
*/
public class ConcreteProduct2 extends Product {
public void method2(){
System.out.println("ConcreteProduct2 do something!");
}
}
4、ConcreteFactory类:具体工厂类
package simpleFactory;
/**
* 具体的工厂类
*/
public class ConcreteFactory {
public static <T extends Product> T createProduct(Class<T> c){
//定义产品类
Product product = null;
try{
//产生一个具体的产品类
product = (Product) Class.forName(c.getName()).newInstance();
}catch (Exception e){
e.printStackTrace();
}
return (T)product;
}
}
5、 Client类:测试类
package simpleFactory;
/**
* @auther fenghui
* @create 2018/2/2.
*/
public class Client {
public static void main(String[] args) {
//创建第一个具体的产品
Product concreteProduct1 = ConcreteFactory.createProduct(ConcreteProduct1.class);
concreteProduct1.method1();
concreteProduct1.method2();
//创建第二个具体的产品
Product concreteProduct2 = ConcreteFactory.createProduct(ConcreteProduct2.class);
concreteProduct2.method1();
concreteProduct2.method2();
}
}
五、优缺点
优点:使用者不需要关系产品类的创建过程,与产品的实现类解耦;
缺点:工厂类的扩展比较困难