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

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

①介绍

工厂方法(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 运算符。

②优缺点

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

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

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

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

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

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

相关文章
|
6月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
172 16
|
6月前
|
设计模式 缓存 安全
【设计模式】【创建型模式】单例模式(Singleton)
一、入门 什么是单例模式? 单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。它常用于需要全局唯一对象的场景,如配置管理、连接池等。 为什么要单例模式? 节省资源 场景:某些对象创
209 15
|
6月前
|
设计模式 JavaScript Java
【设计模式】【创建型模式】原型模式(Prototype)
一、入门 什么是原型模式? 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类。 原型模式的核心是克隆(Clone),即通过复制现有
197 15
|
6月前
|
设计模式 Java Apache
【设计模式】【创建型模式】建造者模式(Builder)
一、入门 什么是建造者模式? 建造者模式(Builder Pattern)是一种创建型设计模式,用于逐步构建复杂对象。 它通过将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。 为什么
225 14
|
6月前
|
设计模式 Java 关系型数据库
【设计模式】【创建型模式】抽象工厂模式(Abstract Factory)
一、入门 什么是抽象工厂模式? 抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定具体的类。 简单来说,抽象工厂模式是工厂方法模式的升级版,它能够创建一组相
219 14
|
8月前
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
8月前
|
设计模式 XML Java
设计模式觉醒系列(03)创建型模式的5个设计模式 | 一口气讲全讲透
本文详细介绍了设计模式中的创建型模式,包括建造者模式、原型模式、单例模式、工厂方法模式和抽象工厂模式。创建型模式关注对象的创建过程,隐藏了创建细节,以提高代码的可维护性和可扩展性。通过具体的实战demo和应用场景分析,展示了每种模式的特点和优势。例如,建造者模式适用于复杂对象的分步骤构建;原型模式通过复制对象实现高效复用;单例模式确保全局唯一实例;工厂方法模式和抽象工厂模式则提供了灵活的对象创建机制,支持多类型产品族的生产。这些模式在实际开发中能够简化客户端代码,提升系统灵活性和复用性。
|
10月前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——工厂方法模式
简单工厂模式是一种创建型设计模式,通过一个工厂类根据传入参数创建不同类型的产品对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。适用于创建对象种类较少且调用者无需关心创建细节的场景。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。
134 15
|
12月前
|
设计模式 架构师 Java
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
设计模式是写出优秀程序的保障,是让面向对象保持结构良好的秘诀,与架构能力与阅读源码的能力息息相关,本文深剖设计模式之 5 大创建型模式。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
|
11月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

热门文章

最新文章