简单工厂模式属于创建型模式,但不是23种设计模式之一。
定义:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类
在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又称为静态工厂方法(Static Factory Method)
需要什么样的产品就传入产品对应的参数,就可以获取所需要的产品对象,而无需知道其实现过程。
例如:有一家饺子店,当客户需要某种饺子时,饺子店生成对应的饺子给客户。这里就可以把饺子店看成工厂(Factory),饺子看成产品(Product) ,饺子的名称看成参数,饺子店根据不同的参数返回不同的饺子。
比如: 客户想要韭菜饺子,这里非菜就是参数,饺子店会根据参数韭菜返回韭菜饺子(当然饺子店有韭菜饺子的前提下)
三类角色:
工厂(核心):负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需对象。→ static 静态方法调用:类名.静态方法名()
抽象产品: 工厂类所创建的所有对象的父类,封装了产品对象的公共方法,所有的具体产品为其子类对象。→ abstract
具体产品:简单工厂模式的创建目标,所有被创建的对象都是某个具体类的实例。它要实现抽象产品中声明的抽象方法。
类图:
/**
简单工厂模式
/*
// SimpleFactory 简单工厂类
public class SimpleFactory{
public static void main(String[] args){
// 具体产品 = 类名.静态方法名() → 返回实例化的产品
Product productA = Factory.createProduct("A")
productA.info(); // 具体产品的方法
// 具体产品 = 类名.静态方法名() → 返回实例化的产品
Product productB = Factory.createProduct("B")
productB.info(); // 具体产品的方法
}
}
// Product 抽象产品类,不能被实例化,继承它的子类可以实例化
abtract class Product{
// info 抽象方法
public abstract void info();
}
// ProductA 具体产品类
class ProductA extends Product{
// 实现抽象产品类中的抽象方法
@Override
public void info(){
System.out.println("产品A")
}
}
// ProductB 具体产品类
class ProductB extends Product{
// 实现抽象产品类中的抽象方法
@Override
public void info(){
System.out.println("产品B")
}
}
// Factory 工厂类
class Factory{
// createProduct 创建产品的静态方法,返回 Product 类型结果
public static Product createProduct(String type){
// 定义一个产品
Product product = null;
switch(type){
case "A":
product = new ProductA(); // 实例化具体产品
break;
case "B":
product = new ProductB(); // 实例化具体产品
break;
default:
System.out.println("没有"+type+"类型的产品")
break;
}
return product;
}
}