一、是什么
定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常具有想通过的父类。
二、模式结构
简单工厂模式包括三个角色:Product、ConcreteProduct、Factory
Product:抽象产品角色
ConcreteProduct:具体产品角色,一般是多个(具体产品一般都是多个呀,要是一个还用查吗)
Factory:工厂角色、工厂类
三、设计与实现
需求:某电器公司欲开发一套电器信息介绍库,该库可以通过用户指定的电器名,提供该电器的详细信息。用简单工厂模式设计该信息库。
实现:
1.Product 抽象产品接口
抽象产品接口,是所有具体产品的父类。
package SimpleFactory;
//抽象产品接口
public interface ElectricProduct {
public void showInfo();
}
2.ConcreteProduct 具体产品类
具体产品类可以有多个产品,都是具体的用电器,每个具体产品类都必须实现抽象产品接口!
这里设计三个具体用电器产品,分别是电磁炉、电饭煲、电饭锅。
package SimpleFactory;
//具体产品 --- 电磁炉
public class DCLConcreteProduct implements ElectricProduct {
public DCLConcreteProduct(){
System.out.println("电磁炉产生了!");
}
@Override
public void showInfo() {
System.out.println("这里是电磁炉的详细信息!");
}
}
package SimpleFactory;
//具体产品 --- 电饭煲
public class DFBConcreteProduct implements ElectricProduct {
public DFBConcreteProduct(){
System.out.println("电饭煲产生了!");
}
@Override
public void showInfo() {
System.out.println("这里是电饭煲的详细信息!");
}
}
package SimpleFactory;
//具体产品 --- 电饭锅
public class DFGConcreteProduct implements ElectricProduct {
public DFGConcreteProduct(){
System.out.println("电饭锅产生了!");
}
@Override
public void showInfo() {
System.out.println("这里是电饭锅的详细信息!");
}
}
3. Factory 工厂类
提供一个静态工厂方法,根据用电器名字找寻匹配用电器信息。
工厂类用来创建产品,根据从客户端(客户)得到的参数(用电器名字),创建产品,返回产品详细信息。
package SimpleFactory;
/**工厂类
* 创建具体用电器产品
* @author:CHAoLip
**/
public class ElectricFactory {
//静态工厂方法
public static ElectricProduct getElectricProduct(String name){
ElectricProduct electricProduct = null;
switch (name) {
case "电磁炉":
electricProduct = new DCLConcreteProduct();
System.out.println("电磁炉初始化了!");
//electricProduct.showInfo();
break;
case "电饭锅":
electricProduct = new DFGConcreteProduct();
//electricProduct.showInfo();
break;
case "电饭煲":
electricProduct = new DFBConcreteProduct();
//electricProduct.showInfo();
break;
default:
System.out.println("你输入的名称有误哦,请再检查一遍!");
break;
}
return electricProduct;
}
}
4.Client 客户端
用户提供用电器名字,工厂负责查询找到用电器信息并返回给客户,若查询不到,提示客户信息是否输入正确。
package SimpleFactory;
import java.util.Scanner;
/**客户端验证执行简单工厂模式
* 客户提供用电器名字 得到用电器详细信息
* @author:CHAoLip
**/
public class ElectricClient {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用电器名称:");
String name = scanner.nextLine();
System.out.println("您输入的名称是:" + name);
ElectricFactory.getElectricProduct(name);
}
}
5.结果
输入正确和错误的结果分别展示相应信息如下: