「这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战」
设计模式——工厂模式
工厂模式是Java中常用的设计模式之一。属于创建型模式。 该模式用于封装和管理对象的创建。工厂模式分为三种:
- 简单工厂模式
- 抽象工厂模式
- 工厂方法模式
下面展开详细的讲解。
简单工厂模式
在工厂类中定义了一个静态方法,因此也可以称为静态方法模式。定义了一个工厂类,可以根据参数的不同返回不同的实例对象,被创建的实例对象具有共同的父类。该模式将对象的实例化和对象的使用操作这两部分分开。使用者可以直接去使用对象,不需要知道其创建的细节。
优缺点
优点
- 将创建实例的工作与实例对象的使用逻辑分类,使用者不需要知道他的创建过程可以免除直接创建产品对象的职责。实现了解耦。
- 客户端无需知道所创建具体产品的类名,只需知道参数即可
缺点
- 工厂类集中了所有产品的创建逻辑,职责过重,一旦异常,整个系统将受影响。
- 违背“开放 - 关闭原则”如果添加新产品,就要修改工厂的逻辑。
- 使用了静态工厂的方法,静态方法无法重写继承,是工厂无法形成基于继承的结构。
适用场景
- 工厂类负责创建的产品对象较少。
- 只知道传入工厂类的参数。不关心如何创建的
结构
主要有三部分构成
- Factory工厂类:内部含有一个静态方法,根据传入的参数不同从而创建不同具体的产品。
- Product抽象产品类:指这一类产品比如茶,其中包含很多种类。其中定义了具体产品的公共接口
- ConcreteProduct具体产品类:这一类产品中具体的茶品,例如红茶。属于茶类。创建具体对象(红茶)
代码实现:
第一部分创建抽象产品茶类,定义产品所具有的公共接口
abstract class Tea {
public abstract void makeTea();
}
复制代码
第二部分创建具体产品类绿茶和红茶
public class BlackTea extends Tea {
@Override
public void makeTea() {
System.out.println("泡一壶红茶");
}
}
public class GreenTea extends Tea {
@Override
public void makeTea() {
System.out.println("泡一壶绿茶");
}
}
复制代码
第三部分创建茶工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例
public class TeaFactory {
/**
* 静态工厂方法
* 使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。
* @param teaName
* @return
*/
public static Tea getTea(String teaName) {
switch (teaName){
case "green":
return new GreenTea();
case "black":
return new BlackTea();
default:
return null;
}
}
}
复制代码