设计模式-创建型模式:工厂方法

简介: 设计模式-创建型模式:工厂方法

①介绍

工厂方法(Factory Method)模式是一种创建型模式,它提供了一种创建对象的最佳方式。

在工厂方法模式中,我们定义了一个抽象工厂类来负责创建具体的对象,而在具体的工厂子类中实现了这个抽象工厂类,返回一个具体的对象。

这样,当我们需要创建一个对象时,我们只需要使用具体工厂子类来创建即可,而不需要直接使用new 运算符。这样可以隐藏创建对象的复杂过程,并且可以使系统更灵活,因为可以在运行时更换具体的工厂类。

1. public interface Animal {
2. void speak();
3. }
4. 
5. public class Dog implements Animal {
6. @Override
7. public void speak() {
8.     System.out.println("Woof!");
9.   }
10. }
11. 
12. public class Cat implements Animal {
13. @Override
14. public void speak() {
15.     System.out.println("Meow!");
16.   }
17. }
18. 
19. public interface AnimalFactory {
20.   Animal createAnimal();
21. }
22. 
23. public class DogFactory implements AnimalFactory {
24. @Override
25. public Animal createAnimal() {
26. return new Dog();
27.   }
28. }
29. 
30. public class CatFactory implements AnimalFactory {
31. @Override
32. public Animal createAnimal() {
33. return new Cat();
34.   }
35. }
36. 
37. public class Main {
38. public static void main(String[] args) {
39. AnimalFactory factory = new DogFactory();
40. Animal animal = factory.createAnimal();
41.     animal.speak();  // Outputs: "Woof!"
42.   }
43. }

在这个示例中,定义了一个Animal 接口和两个实现了这个接口的类,Dog 和 Cat。还定义了一个AnimalFactory 接口,这是一个抽象工厂类,它负责创建 Animal 类型的对象。

然后定义了两个实现了 AnimalFactory 接口的类,DogFactory 和 CatFactory,这两个类分别负责创建 Dog 和 Cat 对象。

在main 方法中,创建了一个 DogFactory 对象,然后调用它的 createAnimal 方法来创建一个 Animal 类型的对象。这样,就可以使用工厂方法来创建对象,而不用直接使用 new 运算符。

②优缺点

工厂方法模式适用的情况:当系统中涉及的对象较少,并且它们之间的关系不是很复杂时。在这种情况下,使用工厂方法模式可以使代码结构清晰,方便维护。

工厂方法模式的优点:当客户端不需要知道所创建的对象的细节时。通过使用工厂方法模式,可以隐藏对象创建的细节,使得客户端不需要关心对象是如何创建的。

工厂方法模式的缺点:增加了系统的复杂度

因为客户端需要知道所有的具体工厂类才能使用它们。

如果系统中增加新的产品,需要修改抽象工厂类和所有的具体工厂类,这违背了“开闭原则”。

如果系统中涉及的对象较多,或者它们之间的关系比较复杂,那么可能需要使用其他的创建型模式。

相关文章
|
1月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
4月前
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)
|
3月前
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
4月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
4月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
4月前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
4月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
4月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式
|
4月前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式