一、什么是简单工厂模式
简单工厂模式是一种对象创建型模式,又叫静态工厂方法模式,它定义一个工厂类,可以根据参数的不同返回不同类的实例。简单工厂模式属于创建型模式,提供了一种创建对象的方法,而不需要指定具体的实现类。
在简单工厂模式中,客户端需要调用工厂类的静态方法来创建所需的接口对应的具体实现类的对象,而无需自己创建或者知道这些类的实现方式。简单工厂模式将对象的创建和使用分离,提供了一种较好的解耦方式。
二、简单工厂模式的优点
1、客户端无需关心所要创建对象的具体实现类,只需知道所需接口的名称即可,从而降低了客户端对于实现类的耦合度,同时也方便了更换具体实现类;
2、具体创建实现类的代码被封装在工厂类中,增加了代码复用性,提高了系统扩展性;
3、简单工厂模式可以看作是迎合了“开闭原则”的一种实现方式。
三、简单工厂模式的缺点
1、工厂类职责过重,增加了工厂类的复杂度和维护难度,同时也增加了系统的耦合度;
2、新增、删除、修改产品时都需要修改原有的工厂类,违背了“开闭原则”中对于扩展开放、对于修改关闭的要求,因此不利于系统的维护和扩展。
四、简单工厂模式的应用场景
1、需要根据不同参数创建不同实现类的对象时,可以使用简单工厂模式。
2、创建工厂类和具体实现类耗时和资源较大,可以使用简单工厂模式避免重复创建对象的过程。
五、简单工厂模式的代码实现
以下是一个简单的简单工厂模式的 Java 代码实现:
interface Product { void use(); } class ConcreteProduct1 implements Product { @Override public void use() { System.out.println("使用产品1"); } } class ConcreteProduct2 implements Product { @Override public void use() { System.out.println("使用产品2"); } } class Factory { public static Product getProduct(String productName) { switch (productName) { case "Product1": return new ConcreteProduct1(); case "Product2": return new ConcreteProduct2(); default: throw new IllegalArgumentException("No such product."); } } } public class Client { public static void main(String[] args) { Product product = Factory.getProduct("Product1"); product.use(); } }
以上代码实现了一个简单工厂模式,其中接口 Product 定义了抽象产品类,类 ConcreteProduct1 和 ConcreteProduct2 分别实现了 Product 接口,工厂类 Factory 定义了静态方法 getProduct() 来根据参数返回 Product 接口的不同实现类的对象。
六、简单工厂模式的使用注意事项
1、工厂类只负责创建对象,不应有其他的额外功能;
2、工厂类的创建方法一般为静态方法,但并不是必须的;
3、工厂类一般使用单例模式,确保全局只有一个工厂类;
4、客户端只需知道所需的具体产品类名称即可,不需知道如何创建对象的细节,但需要知道所需产品的公共接口;
5、简单工厂模式的核心思想是将对象的创建和使用分离,提高了系统的扩展性和稳定性,但也增加了系统的复杂度和维护难度,需要权衡利弊进行使用。