前言
本文将详细探讨创建型模式,主要针对解决Java对象的创建问题。
工厂模式简介
在面向对象的编程中,通过继承和多态的概念实现了父类与子类之间的(is-A)关系,进而实现子类的多态性。这种实现方式在某些情况下存在一定的问题。
例如,当需要实例化Verhicle类的Car或Truck子类时,若子类复写了父类的方法,则每个子类实例化时都需要调用相应的构造器。
问题所在
- 缺乏统一性操作:子类复写父类方法时,需要针对每个子类使用不同的构造器,这降低了操作的统一性。
- 高耦合度:子类与父类之间的依赖关系明显,导致耦合度高。
- 违反开闭原则:这既违反了父类的开闭原则,也违反了子类的单一职责原则。
为了解决这些问题,简单工厂模式应运而生,它实现了逻辑的封装,使用公共的工厂类来统一创建对象实例。
简单工厂模式详解
- 简单工厂模式实现的三种方式之一是静态工厂模式,它使用反射机制进行类注册,通过newInstance方法进行实例化。
静态工厂模式的解决方式
通过创建一个单独的verhicle简单工厂类,该类内置枚举储存所有需要创建实例的子类。工厂类提供一个统一的create(type)方法,根据传入参数的类型来按需创建实例。
优势与劣势分析
使用反射机制的优势与劣势
使用反射机制可以解决静态工厂模式开闭原则的问题,将注册和创建实例分开实现。反射机制会影响程序性能。
改进的简单工厂模式
一种改进方式是避免使用反射机制,提高性能。可以通过基类中创建一个抽象方法,要求子类全部复写该方法,方法体中创建子类对象,并利用Map集合存储已经创建的子类实例。
工厂方法模式与抽象工厂模式
工厂方法模式通过服务端将产品接口化,解决产品的拓展问题。而抽象工厂模式则在工厂方法模式的基础上进一步优化,减少工厂类的数量,避免冗余问题。
总结
通过以上模式的探讨,我们可以看到,不同的创建型模式都有其优势和劣势。在选择使用时,需要根据具体场景和需求进行权衡。希望这篇文章能对你有所帮助。
如果你觉得这篇内容对你有帮助,请考虑以下几点: