把握规划形式之工厂办法形式
工厂办法形式
工厂办法形式(Factory Method Pattern)是一种创立型规划形式,它界说了一个用于创立方针的接口,但由子类决议要实例化的详细类。工厂办法形式将方针的创立托付给子类,然后完结了类的实例化推迟和高内聚低耦合的方针。
工厂办法形式的结构
工厂办法形式一般包含以下几个人物:
- Product(产品接口或笼统类):
- 界说产品的公共接口,一切详细产品都应完结这个接口。
- ConcreteProduct(详细产品):
- 完结产品接口,供给详细的完结。
- Creator(笼统工厂类):
- 声明工厂办法,用于回来一个
Product
方针。这个类一般是一个笼统类或接口,界说了产品的创立进程。
- ConcreteCreator(详细工厂类):
- 完结工厂办法,担任实例化详细的产品方针。不同的详细工厂会创立不同的详细产品。
工厂办法形式的优缺陷
长处
- 解耦:客户端不需求关怀详细产品的创立进程,只需调用工厂办法获取产品,降低了体系的耦合度。
- 统一管理方针创立: 工厂形式能够统一管理方针的创立进程,包含初始化、装备等操作,使得创立进程愈加灵敏和可控。
- 契合开闭准则:新增产品时,只需求创立新的详细产品类和工厂类,不需求修正现有代码。
- 灵敏性:经过承继和多态,子类能够决议创立哪种详细产品。
缺陷
- 类的数量添加:为了支撑不同类型的产品,有必要创立多个详细工厂类,类的数量会添加。
- 或许添加体系杂乱性:比简略工厂形式要杂乱,或许会使得体系变得愈加难以了解和保护。
工厂办法形式的示例代码
假定咱们有一个轿车出产工厂,工厂能够出产不同类型的轿车,例如BMW和Audi。
类图
示例代码
产品接口和产品类
public interface Car {
void drive();
}
public class BMW implements Car {
@Override
public void drive() {
System.out.println("Driving a BMW car.");
}
}
public class Audi implements Car {
@Override
public void drive() {
System.out.println("Driving an Audi car.");
}
}
工厂相关的类
public abstract class CarFactory {
// 工厂办法,回来详细产品
public abstract Car createCar();
}
public class BMWFactory extends CarFactory {
@Override
public Car createCar() {
return new BMW(); // 回来详细的BMW方针
}
}
public class AudiFactory extends CarFactory {
@Override
public Car createCar() {
return new Audi(); // 回来详细的Audi方针
}
}
测验代码
public class Client {
public static void main(String[] args) {
// 运用工厂办法创立轿车
CarFactory factory = new BMWFactory(); // 经过BMW工厂创立BMW轿车
Car car = factory.createCar();
car.drive(); // 输出:Driving a BMW car.
factory = new AudiFactory(); // 经过Audi工厂创立Audi轿车
car = factory.createCar();
car.drive(); // 输出:Driving an Audi car.
}
}
测验成果
Driving a BMW car.
Driving an Audi car.
工厂办法形式的变体
除了传统的工厂办法形式,有时在实践运用中还会运用一些变体:
-
笼统工厂形式:如果有多个产品族(即多个系列的产品),能够经过笼统工厂形式来完结每个工厂担任创立一组相关产品。与工厂办法形式的差异在于,工厂办法形式一般只触及一个产品类的创立,而笼统工厂形式处理多个产品类的创立。
-
工厂办法和单例形式结合:工厂办法能够和单例形式结合运用,保证工厂实例和产品实例的唯一性。
总结
工厂办法形式是一种创立型规划形式,经过将方针的创立进程托付给子类来完结灵敏的产品创立。比较于简略工厂形式,工厂办法形式愈加灵敏,契合开闭准则,适用于需求扩展产品品种的场景,但也或许导致类数量添加。
工厂类供给某个产品的工厂办法来出产产品,躲藏方针的创立进程,使客户端无需了解方针的详细创立逻辑,使得客户端代码与详细类的解耦,减少了依靠,更简略保护和扩展。
-
方针的详细创立逻辑能够运用
反射
、动态署理
或许结合其他创立型规划形式
来完结方针的实例化; -
引入了“中心者”和面向笼统编程运用了多态的特性,起到了解耦的效果;
-
运用者(客户端)面向笼统(接口、笼统类)编程,而不直接依靠于详细产品类。
什么是规划形式?
单例形式及其思维
规划形式--原型形式及其编程思维
把握规划形式之生成器形式
把握规划形式之简略工厂形式
超有用的SpringAOP实战之日志记载
2023年下半年软考考试重磅音讯
经过软考后却收取不到实体证书?
计算机算法规划与剖析(第5版)
Java全栈学习道路、学习资源和面试题一条龙
软考证书=职称证书?
软考中级--软件规划师毫无保留的备考共享