💧 工厂模式与抽象工厂 \color{#FF1493}{工厂模式与抽象工厂} 工厂模式与抽象工厂💧
🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥
文章目录
- 🐳工厂模式与抽象工厂
- 工厂模式
- 基本概念
- 设计思想
- 应用场景
- 代码实现
- 抽象工厂模式
- 基本概念
- 设计思想
- 应用场景
- 代码实现
- 区别与联系
- 🐳结语
🐳工厂模式与抽象工厂
在软件开发中,工厂模式和抽象工厂模式是常用的创建型设计模式,它们都关注对象的创建,但在设计思想、应用场景和代码实现方式上有所不同。本文将深入探讨工厂模式和抽象工厂模式的基本概念、设计思想、应用场景以及它们之间的主要区别与联系。
工厂模式
基本概念
💧工厂模式是一种创建型设计模式,它通过定义一个创建对象的接口,但将具体对象的创建延迟到子类中。工厂模式包括以下几个主要角色:
- 抽象产品(Abstract Product):定义了产品的共同接口,可以是具体产品所实现的接口或抽象类。
- 具体产品(Concrete Product):实现了抽象产品接口的具体类,是工厂模式中要创建的对象。
- 抽象工厂(Abstract Factory):定义了创建产品的工厂接口,声明了工厂方法。
- 具体工厂(Concrete Factory):实现了抽象工厂接口,负责具体产品的创建。
设计思想
💧工厂模式的设计思想是将对象的实例化延迟到具体工厂中,从而实现对象的创建与使用的解耦。客户端只需要知道抽象工厂接口,而无需关心具体产品的创建过程。这样,如果需要添加新的产品类型,只需要创建对应的具体产品类和具体工厂类,无需修改客户端代码。
应用场景
💧工厂模式适用于以下场景:
- 当一个类无法预知要创建的对象的确切类别时,可以使用工厂模式将对象的创建逻辑封装在具体工厂中。
- 当需要在运行时动态决定创建哪个具体产品时,可以使用工厂模式。
代码实现
💧下面是一个简单的工厂模式示例代码,以创建不同形状的图形为例:
// 抽象产品
interface Shape {
void draw();
}
// 具体产品
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle draw");
}
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle draw");
}
}
// 抽象工厂
interface ShapeFactory {
Shape createShape();
}
// 具体工厂
class CircleFactory implements ShapeFactory {
@Override
public Shape create
Shape() {
return new Circle();
}
}
class RectangleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Rectangle();
}
}
// 客户端使用
public class Client {
public static void main(String[] args) {
ShapeFactory factory = new CircleFactory();
Shape shape = factory.createShape();
shape.draw();
}
}
💧在上述示例中,抽象产品为Shape
接口,具体产品为Circle
和Rectangle
类。抽象工厂为ShapeFactory
接口,具体工厂为CircleFactory
和RectangleFactory
类。客户端通过选择不同的具体工厂来创建不同的具体产品。
抽象工厂模式
基本概念
💧抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象。抽象工厂模式包含以下几个主要角色:
- 抽象产品族(Abstract Product Family):定义了一组相关产品的共同接口。
- 具体产品族(Concrete Product Family):包含一组具体产品,实现了抽象产品族的接口。
- 抽象工厂(Abstract Factory):定义了创建产品族的方法。
- 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体产品族的对象。
设计思想
💧抽象工厂模式的设计思想是提供一个接口,用于创建一系列相关的产品对象。客户端使用抽象工厂接口来创建产品对象,而无需关心具体产品的创建细节。这样可以确保创建的产品对象是相互关联和兼容的。
应用场景
💧抽象工厂模式适用于以下场景:
- 当需要创建一系列相互关联或相互依赖的产品对象时,可以使用抽象工厂模式。
- 当希望一个系统独立于它的产品的创建、组合和表示时,可以使用抽象工厂模式。
代码实现
💧下面是一个简单的抽象工厂模式示例代码,以创建不同操作系统下的按钮和文本框为例:
// 抽象产品族 - 按钮
interface Button {
void render();
}
// 具体产品族 - Windows 按钮
class WindowsButton implements Button {
@Override
public void render() {
System.out.println("Render Windows button");
}
}
// 具体产品族 - Mac 按钮
class MacButton implements Button {
@Override
public void render() {
System.out.println("Render Mac button");
}
}
// 抽象产品族 - 文本框
interface TextField {
void render();
}
// 具体产品族 - Windows 文本框
class WindowsTextField implements TextField {
@Override
public void render() {
System.out.println("Render Windows text field");
}
}
// 具体产品族 - Mac 文本框
class MacTextField implements TextField {
@Override
public void render() {
System.out.println("Render Mac text field");
}
}
// 抽象工厂
interface GUIFactory {
Button createButton();
TextField createTextField();
}
// 具体工厂 - Windows GUI
class WindowsGUIFactory implements GUIFactory {
@Override
public Button createButton() {
return new WindowsButton();
}
@Override
public TextField createTextField() {
return new WindowsTextField();
}
}
// 具体工厂 - Mac GUI
class MacGUIFactory implements GUIFactory {
@Override
public Button createButton() {
return new MacButton();
}
@Override
public TextField createTextField() {
return new MacTextField();
}
}
// 客户端使用
public class Client {
public static void main(String[] args) {
GUIFactory factory = new MacGUIFactory();
Button button = factory.createButton();
TextField textField = factory.createTextField();
button.render();
textField.render();
}
}
💧在上述示例中,抽象产品族包括Button
和TextField
接口,具体产品族包括WindowsButton
、MacButton
、WindowsTextField
和MacTextField
类。抽象工厂为GUIFactory
接口,具体工厂为WindowsGUIFactory
和MacGUIFactory
类。客户端通过选择不同的具体工厂来创建相应操作系统下的按钮和文本框。
区别与联系
工厂模式
关注的是单个对象的创建
,通过抽象工厂接口和具体工厂实现类之间的关系,封装了对象
的创建过程。而抽象工厂
模式关注的是一组相关对象的创建
,通过抽象工厂接口和具体工厂实现类之间的关系,封装了一系列相关对象
的创建过程。工厂模式
的产品是单一的
,每个具体工厂只创建一个具体产品
。而抽象工厂
模式的产品是相关的
,每个具体工厂创建一组相关产品
,保证了这些产品是相互关联和兼容的。工厂模式
通过继承
来实现具体产品的创建,每个具体产品对应一个具体工厂
。而抽象工厂
模式通过对象组合
来实现具体产品族的创建,每个具体工厂对应一个具体产品族
。
💧通过工厂模式和抽象工厂模式,我们可以更灵活地创建和组织对象,降低了客户端与具体产品的耦合度,提高了代码的可维护性和扩展性。
🐳结语
🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。
🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!