原文地址:https://jaune162.blog/design-pattern/simple-factory-pattern/
简介
简单工厂模式是一种非常常用的设计模式,但是并不属于GoF中的23种设计模式。简单设计模式有很多种实现方式。
本文我们就来讨论简单工厂模式的实现方式,以及如何借助Spring实现一个扩展性很好的简单工厂模式。
定义及实现
定义
- creates objects without exposing the instantiation logic to the client.
- refers to the newly created object through a common interface
- 创建对象但是不想客户端暴露对象实例化的逻辑
- 通过通用接口引用新创建的对象
结构
- Product:商品接口。
- ConcreteProductA和ConcreteProductB:分别为商品的两个实现。
- Factory:工厂,创建商品实例,并将商品实例返回给客户端供客户端调用。
- Client:客户端,商品的使用者。
实现
public interface Product {
void doSomething();
}
public class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("This is product A");
}
}
public class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("This is product B");
}
}
public class Factory {
public Product createProduct(String type) {
if (type.equalsIgnoreCase("A")) {
return new ConcreteProductA();
} else if (type.equalsIgnoreCase("B")) {
return new ConcreteProductB();
}
throw new RuntimeException("不支持的类型");
}
}
public class Client {
public static void main(String[] args) {
Factory factory = new Factory();
Product product = factory.createProduct("A");
product.doSomething();
}
}
其实简单工厂模式的核心就是下面的代码
if (type.equalsIgnoreCase("A")) {
return new ConcreteProductA();
} else if (type.equalsIgnoreCase("A")) {
return new ConcreteProductB();
}
通过判断传入的参数,然后根据参数创建不同的对象。
这种方式的弊端就是我们没增加一种Product
的实现,都需要修改工厂类。下面我们将一种不用修改工厂类的方法。文章来源:https://www.toymoban.com/news/detail-835201.html
将产品注册到工厂
Product
、ConcreteProductA
、ConcreteProductB
不变。文章来源地址https://www.toymoban.com/news/detail-835201.html
public class Factory {
public Map<String, Class<? extends
到了这里,关于简单工厂模式-Simple Factory Pattern的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!