工厂模式是设计模式中的一种,它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是使用一个共同的接口来指向新创建的对象。
一、工厂模式的基本概念
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是使用一个共同的接口来指向新创建的对象。
二、工厂模式的主要角色
1、抽象产品:是定义了产品的规范,描述了产品的主要特性和功能。
2、具体产品:是实现了抽象产品角色所定义的接口的类,由具体工厂来创建,它们之间一一对应。
3、抽象工厂:是提供了创建产品的接口,包含创建不同类型产品的抽象方法。
4、具体工厂:是实现抽象工厂中的多个抽象方法的类,充当实例化具体产品的角色。
三、工厂模式的优点
1、代码具有良好的可扩展性,增加新的具体产品时,只需要增加一个新的具体产品类就可以,无需修改原有代码。
2、屏蔽了对象的创建过程,客户端不需要知道对象是如何创建的,只需要知道如何获取对象即可。
3、符合面向对象设计的开闭原则,即对扩展开放,对修改关闭。
四、工厂模式的使用场景
1、当需要创建的对象具有复杂的内部结构或者需要依赖具体的环境信息时,可以使用工厂模式。
2、当需要提供统一的接口以供客户端访问时,可以使用工厂模式。
3、当需要将对象的创建和使用分离,降低系统的耦合度时,可以使用工厂模式。
五、Java中的工厂模式实现
在Java中,工厂模式主要有两种实现方式:简单工厂模式和工厂方法模式。
1、简单工厂模式:也称为静态工厂模式,它提供一个静态的工厂方法来创建对象,简单工厂模式的优点是实现简单,但是缺点是无法应对新增产品的情况。
2、工厂方法模式:它定义了一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类,Factory Method使得你可以将对象实例化的复杂度分散到你的应用中的多个地方而不是集中在一个地方。
六、Java中的工厂模式示例
以下是一个简单的Java工厂模式示例:
public interface Product { void show(); } public class ConcreteProductA implements Product { @Override public void show() { System.out.println("ConcreteProductA"); } } public class ConcreteProductB implements Product { @Override public void show() { System.out.println("ConcreteProductB"); } } public class SimpleFactory { public static Product createProduct(String type) { if ("A".equalsIgnoreCase(type)) { return new ConcreteProductA(); } else if ("B".equalsIgnoreCase(type)) { return new ConcreteProductB(); } else { throw new IllegalArgumentException("Invalid product type: " + type); } } }
在这个例子中,Product
是一个抽象产品接口,ConcreteProductA
和ConcreteProductB
是具体产品类,SimpleFactory
是简单工厂类,客户端通过调用SimpleFactory.createProduct()
方法来获取产品对象,而不需要知道产品的具体创建过程。
还没有评论,来说两句吧...