工厂模式分为简单工厂、工厂方法;为了实现产品的创建和使用分离。
工厂模式基本流程:
1、产品的抽象接口
2、产品类实现接口
3、大工厂类里实例化(简单工厂模式) :通过传入参数返回相应对象进行实例化
4、工厂实例接口(工厂方法模式)
5、各自创建小工厂实现接口(工厂方法模式):通过new小工厂的方法进行实例化
这是普通情况下,使用new来实例对象
产品代码
interface Cp { //产品接口
void name();
}
static class Cp1 implements Cp { //产品类一
@Override
public void name() {
System.out.println("is one");
}
}
static class Cp2 implements Cp { //产品类二
@Override
public void name() {
System.out.println("is two");
}
}
static class Cp3 implements Cp { //产品类三
@Override
public void name() {
System.out.println("is three");
}
}
使用者代码
public class Use {
public static void main(String[] args) {
Cp cp1 = new Cp1();
//正常方法:通过new去创建对象,需要知道对象具体类名
Cp cp2 = factory.getCp("Cp2");
//简单工厂:通过factory工厂类调用get方法获取对象,实现方法写在get方法里
Cp cp3 = new Cp3Factory().getCp();
//工厂方法:通过产品工厂接工厂接口,实例对象写在产品工厂里
cp1.name();
cp2.name();
cp3.name();
}
简单工厂
也称静态工厂,通过写一个工厂类,将产品的实例化代码放在工厂类方法A里,通过调用方法A传入不同参数,实例化对应产品
但由于产品实例化代码都写在工厂类里,比如新增一个产品,就需要在方法里新写一段代码来判断
static class factory {
//工厂类 Cp2的实现方式
public static Cp getCp(String c) {
//简单工厂通过判断传入的参数,返回对应的对象完成实例化
if (c.equals("Cp1")) {
return new Cp1();
} else if (c.equals("Cp2")) {
return new Cp2();
} else {
return null;
}
}
}
简单工厂流程图
工厂方法
将简单工厂的实例方法抽象为接口,当需要新产品时,创建新产品的单独工厂,然后通过单独工厂重写抽象方法来实例化产品,就不需要修改原来的代码
interface CpFactory {
//工厂方法 Cp3实现方式
Cp getCp();
}
static class Cp3Factory implements CpFactory {
//创建Cp3工厂,实现工厂方法接口的getCp方法,并进行重写实例化
@Override
public Cp getCp() {
return new Cp3();
}
工厂方法流程图