
本文共 1985 字,大约阅读时间需要 6 分钟。
工厂方法模式 - 一个清晰的解释
定义
工厂方法模式(Factory Method Pattern)是一种设计模式,其核心思想是定义一个用于创建对象的接口。通过对工厂类的抽象化,子类可以决定具体要创建的对象类。这种方式使得对象的实例化过程被推迟(deferred to subclass),从而提高了系统的扩展性和灵活性。
代码示例
以下是一个简单的工厂方法模式示例:
-
AbstractProduct 抽象类
public abstract class AbstractProduct { // 定义一个公共方法 public void publicMethod() { // 进行某种处理 } // 抽象方法,子类必须实现 public abstract void abstractMethod();}
-
ConcreteProduct1 和 ConcreteProduct2 具体实现类
public class ConcreteProduct1 extends AbstractProduct { public void abstractMethod() { // 具体实现方法 }}public class ConcreteProduct2 extends AbstractProduct { public void abstractMethod() { // 具体实现方法 }}
-
AbstractFactory 抽象工厂类
public abstract class AbstractFactory { // 创建对象的方法,具体工厂需要实现该方法 public abstract
T createProduct(Class c);} -
ConcreteFactory 具体工厂类
public class ConcreteFactory extends AbstractFactory { public
T createProduct(Class c) { // 实例化具体的产品类 Product product = null; try { product = (Product) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) product; }} -
使用示例
AbstractFactory factory = new ConcreteFactory();Product product = factory.createProduct(ConcreteProduct1.class);// 调用已经实例化的对象的公共方法product.publicMethod();
工厂方法模式的优点
封装性高:工厂类通过抽象接口实现了对象的创建逻辑,遵循了迪米特法则(Demeter's Law),高层模块只关心提供的接口,不需要了解具体实现。
扩展性强:只需要添加一个新的具体实现类,就能支持新的产品类型,这降低了系统扩展的门槛。
依赖倒置原则:通过对工厂类的抽象化,实现类被遮盖了,系统的高度依赖于接口而非具体实现,这有助于减少依赖关系。
符合里氏替换原则:抽象类可以被具体实现类替代,系统具有较高的灵活性和可维护性。
代码结构清晰:工厂类和产品类之间的关系明确,便于系统的维护和扩展。
工厂方法模式的变种
根据实际需求,工厂方法模式可以有多种实现方式:
简单工厂模式(Simple Factory Pattern):这种方式使用单一工厂类。通过静态方法实现对象的实例化。
多工厂类(Multiple Factory Classes):针对特定的业务需求,可以创建多个工厂类,每个工厂专门生成特定类型的产品。
反射工厂(Singleton Factory):通过反射机制生成单例对象,避免了多次创建带来的性能问题。
延迟初始化工厂(Lazy Initialization Factory):使用内存缓存存储实例化后的对象,并通过双重锁机制保证线程安全,确保在第一次使用时才会加载类。
以上差异性别增强了工厂方法模式的适用性,能够满足不同场景下的需求。
发表评论
最新留言
关于作者
