希赛考试网
首页 > 软考 > 软件设计师

抽象工厂模式类图和代码

希赛网 2024-06-15 17:38:27

抽象工厂模式是一种常用的软件设计模式,它属于创建型模式,主要用来解决对象创建问题。该模式提供一个抽象工厂,可以创建一系列相关的对象,而无需指定具体的类。

在抽象工厂模式中,抽象工厂是用来声明一组具有相同特征的工厂方法的接口,具体工厂则实现这些接口,从而生产出一系列相关的产品。而产品族则指由同一个工厂生产的一组产品,这些产品在某一方面具有相同的特点或者用途。

下面是抽象工厂模式的类图:

![abstract-factory-pattern](https://user-images.githubusercontent.com/60591075/134112402-c3c157ef-3f7a-4ac7-8d3f-6dc52256c94c.png)

如上图所示,抽象工厂模式涉及到四种角色:

1. 抽象工厂(Abstract Factory):提供一组创建抽象产品的工厂接口,声明了一系列生产产品的方法。

2. 具体工厂(Concrete Factory):实现抽象工厂接口,用于生产一系列相关的产品。

3. 抽象产品(Abstract Product):提供了一系列产品的公共接口,其具体子类将由具体工厂来创建。

4. 具体产品(Concrete Product):实现抽象产品接口,用于客户端获取和使用。

下面是抽象工厂模式的代码实现:

```java

// 抽象产品 - 按钮

public interface Button {

void paint();

}

// 抽象产品 - 文本框

public interface TextField {

void paint();

}

// 具体产品A类 - 按钮

public class WindowsButton implements Button {

@Override

public void paint() {

System.out.println("Windows按钮");

}

}

// 具体产品A类 - 文本框

public class WindowsTextField implements TextField {

@Override

public void paint() {

System.out.println("Windows文本框");

}

}

// 具体产品B类 - 按钮

public class MacButton implements Button {

@Override

public void paint() {

System.out.println("Mac按钮");

}

}

// 具体产品B类 - 文本框

public class MacTextField implements TextField {

@Override

public void paint() {

System.out.println("Mac文本框");

}

}

// 抽象工厂

public interface GUIFactory {

Button createButton();

TextField createTextField();

}

// 具体工厂A

public class WindowsFactory implements GUIFactory {

@Override

public Button createButton() {

return new WindowsButton();

}

@Override

public TextField createTextField() {

return new WindowsTextField();

}

}

// 具体工厂B

public class MacFactory 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 WindowsFactory();

// 客户端通过具体工厂获取具体产品

Button button = factory.createButton();

TextField textField = factory.createTextField();

// 使用具体产品

button.paint();

textField.paint();

}

}

```

从代码实现中可以看到,抽象工厂模式实现了一种抽象层次,将对象的创建过程与客户端分离,使得客户端仅需根据具体的工厂去获取所需的产品。从而使得系统更加灵活,易于扩展,同时也更容易进行测试。

此外,抽象工厂模式还有以下几个特点:

1. 抽象工厂模式将一组相关的产品进行封装,可以提供一个统一的创建接口。

2. 抽象工厂模式可以在不知道具体产品类名的情况下创建产品对象。

3. 抽象工厂模式与工厂方法模式的区别在于,工厂方法模式只能生产一个具体的产品,而抽象工厂模式可以生产一组相关的产品。

综上所述,抽象工厂模式在实现了抽象层次的同时,也实现了一种开闭原则,能够方便地进行扩展。因此,它在软件开发中是一种非常常用的设计模式,尤其是在构造界面控件和创建数据库访问对象等场景下,能够帮助我们更好的实现系统的功能需求。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件