作者平台:
| CSDN:blog.csdn.net/qq\_4115394…
| 知乎:www.zhihu.com/people/1024…
| GitHub:github.com/JiangXia-10…
| 公众号:1024笔记
本文大概11588字,读完共需25分钟
定义
工厂模式(Factory Pattern)也是 Java中最常用的设计模式之一。这种类型的设计模式也属于创建型模式,它提供了一种创建对象的最佳方式。
工厂模式主要是为创建对象提供过渡接口来指向新创建的对象,以便将创建对象的具体过程屏蔽隔离起来,不会对客户端暴露创建逻辑,,从而达到提高灵活性的目的。
所以工厂模式就是通过定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。这就好比工厂里面负责物品的生产,我们需要什么东西直接去工厂里面拿就行了,而不用管这个物品是如何被造出来的。
根据抽象程度的不同可以将工厂模式分为三种具体的工厂模式,它们分别是:简单工厂模式(Simple Factory Pattern )、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory)。接下来就分别说说这三种工厂模式。
简单工厂模式
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式。简单工厂模式的实质就是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
所以简单工厂模式包含以下三个部分:
Factory:工厂,工厂负责实现创建所有实例的内部逻辑
Product:抽象产品,抽象产品是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
ConcreteProduct:具体产品,具体产品是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
栗子:首先声明一个抽象的产品类:
package com.jiangxia.Factory.SimpleFactory;
/**
* @Author: 江夏
* @Date: 2021/10/26/21:37
* @Description: 简单工厂方法的Product--抽象产品
*/
public abstract class Product1 {
public void method1(){
System.out.println("这里是抽象产品的公共方法");
}
//这里声明抽象的业务方法
public abstract String method();
}
接着需要一个工厂类:
package com.jiangxia.Factory.SimpleFactory;
/**
* @Author: 江夏
* @Date: 2021/10/26/21:42
* @Description: 工厂类
*/
public class Factory1 {
public static Product1 getProduct(String string){
Product1 product1 = null;
if(string.equals("汽车")){
product1 = new ConcreteProduct1();
}else{
product1 = new ConcreteProduct2();
}
return product1;
}
}
然后再是具体的产品类,这里用于演示就是两个具体类:
package com.jiangxia.Factory.SimpleFactory;
/**
* @Author: 江夏
* @Date: 2021/10/26/21:40
* @Description: 具体产品1-- 汽车
*/
public class ConcreteProduct1 extends Product1 {
@Override
public String method() {
return "这里生产了汽车";
}
}
package com.jiangxia.Factory.SimpleFactory;
/**
* @Author: 江夏
* @Date: 2021/10/26/21:40
* @Description:具体产品2--电脑
*/
public class ConcreteProduct2 extends Product1 {
@Override
public String method() {
return "这里生产了电脑";
}
}
测试用例:
package com.jiangxia.Factory.SimpleFactory;
/**
* @Author: 江夏
* @Date: 2021/10/26/21:48
* @Description: 简单工厂的测试
*/
public class SimpleFactoryTest {
public static void main(String[] args) {
Product1 product1 = Factory1.getProduct("汽车");
product1.method1();
System.out.println(product1.method());
Product1 product2 = Factory1.getProduct("电脑");
product2.method1();
System.out.println(product2.method());
}
}
运行后输出结果如下: