首页 > 其他分享 >二十三种模式之抽象工厂模式

二十三种模式之抽象工厂模式

时间:2024-08-25 18:26:54浏览次数:12  
标签:二十三 Windows GUI 模式 Mac 抽象 FileSystem public

1.设计模式的分类

  1. 创建型模式(五种):工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。
  2. 结构型模式(七种):适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。
  3. 行为型模式(十一种):状态模式、模板方法模式、访问者模式、迭代子模式、责任链模式、备忘录模式、解释器模式、命令模式、中介者模式、观察者模式、策略模式。

目的是提供一个接口以创建一系列相关或者依赖对象,而不需要指定它们具体的类。

2.四个主要角色

  1. 抽象工厂(Abstract Factory)

    • 定义了一个创建产品族的接口。它声明了一组方法,这些方法用于创建抽象产品。
  2. 具体工厂(Concrete Factory)

    • 实现了抽象工厂接口,并且具体实现这些方法以创建具体产品。每个具体工厂都对应一个产品族,并且负责创建该产品族中的产品。
  3. 抽象产品(Abstract Product)

    • 定义了产品的接口,这些接口是产品类的抽象。它为产品族中的产品提供了统一的接口。
  4. 具体产品(Concrete Product)

    • 实现了抽象产品接口的具体类。具体产品由具体工厂创建,并且组成了一个产品族。每个具体产品都是抽象产品的一个实现。

3.类比电脑制造商

3.1故事背景:

想象你是一个电脑制造商,你的公司生产两种类型的电脑:Windows电脑和Mac电脑。每种电脑都有其独特的用户界面(GUI)和文件系统(FileSystem)。你的任务是确保用户在购买时,能够获得与他们选择的操作系统相匹配的GUI和FileSystem。

3.2讲解过程:

  • 假设你是客户,走进电脑商店,告诉店员:“我想要一台Windows电脑。”

    • 店员会从WindowsFactory工厂为你创建一套Windows电脑组件,包括:
      • 调用createGUI()方法,得到一个WindowsGUI对象,显示Windows用户界面。
      • 调用createFileSystem()方法,得到一个WindowsFileSystem对象,格式化Windows文件系统。
  • 如果你说:“我想要一台Mac电脑。”

    • 店员会从MacFactory工厂为你创建一套Mac电脑组件,包括:
      • 调用createGUI()方法,得到一个MacGUI对象,显示Mac用户界面。
      • 调用createFileSystem()方法,得到一个MacFileSystem对象,格式化Mac文件系统。

3.3代码示例

// 抽象产品:用户界面组件
interface GUI {
    void display();
}

// 抽象产品:文件系统组件
interface FileSystem {
    void format();
}

// Windows系统的用户界面组件
class WindowsGUI implements GUI {
    public void display() {
        System.out.println("Displaying Windows GUI.");
    }
}

// Mac系统的用户界面组件
class MacGUI implements GUI {
    public void display() {
        System.out.println("Displaying Mac GUI.");
    }
}

// Windows系统的文件系统组件
class WindowsFileSystem implements FileSystem {
    public void format() {
        System.out.println("Formatting Windows file system.");
    }
}

// Mac系统的文件系统组件
class MacFileSystem implements FileSystem {
    public void format() {
        System.out.println("Formatting Mac file system.");
    }
}

// 抽象工厂:操作系统工厂
interface OSFactory {
    GUI createGUI();
    FileSystem createFileSystem();
}

// Windows系统工厂
class WindowsFactory implements OSFactory {
    public GUI createGUI() {
        return new WindowsGUI();
    }

    public FileSystem createFileSystem() {
        return new WindowsFileSystem();
    }
}

// Mac系统工厂
class MacFactory implements OSFactory {
    public GUI createGUI() {
        return new MacGUI();
    }

    public FileSystem createFileSystem() {
        return new MacFileSystem();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        OSFactory factory;

        // 用户选择购买Windows系统
        factory = new WindowsFactory();
        GUI windowsGUI = factory.createGUI();
        FileSystem windowsFileSystem = factory.createFileSystem();
        windowsGUI.display();
        windowsFileSystem.format();

        // 用户选择购买Mac系统
        factory = new MacFactory();
        GUI macGUI = factory.createGUI();
        FileSystem macFileSystem = factory.createFileSystem();
        macGUI.display();
        macFileSystem.format();
    }
}

标签:二十三,Windows,GUI,模式,Mac,抽象,FileSystem,public
From: https://blog.csdn.net/apple_64847327/article/details/141531988

相关文章

  • Java行为型设计模式-访问者模式(含二叉树场景示例)
    1.访问者模式简介访问者模式(VisitorPattern)是一种行为型设计模式,其主要目的是将数据结构与数据操作解耦。用于将数据结构和在数据结构上的操作分离开来。‌这种模式允许在不修改数据结构的情况下,定义新的操作。2.访问者模式角色访问者模式的主要角色包括:2.1抽象访问......
  • 在C#中应用命令模式:设计和实现的最佳实践
    在C#中应用命令模式:设计和实现的最佳实践引言在软件设计中,设计模式是解决常见问题的通用解决方案。命令模式(CommandPattern)是行为型设计模式之一,它将请求或操作封装为对象,从而使得你可以用不同的请求对客户端进行参数化,队列请求或记录请求日志,以及支持可撤销的操作。在C#......
  • ZBlog强制开启 Debug 调试模式
    常规开启调试模式是在后台设置中进行,在后台设置的全局设置里打开“调试模式”并保存即可。如果网站程序出错,不能进入后台进行设置,那么在1.7.3及更高版本可以在这样设置:使用空间面板的文件管理或者FTP修改文件:path/zb_users/c_option.php;'ZC_DEBUG_MODE'=>true,//开启Deb......
  • 基于开源 AI 智能名片链动 2+1 模式微信拓客小程序的会员推荐酬谢策略
    摘要:本文旨在探讨在当前数字化营销环境下,如何利用开源AI智能名片链动2+1模式微信拓客小程序,有效地酬谢老会员的推荐行为,以实现门店的业务增长和客户拓展。通过分析老会员推荐的重要性,结合积分酬谢方式以及与“三级分销”概念的区别,提出了一套切实可行的酬谢策略,为门店的经......
  • 设计模式篇(DesignPattern - 前置知识 & 七大原则)(持续更新调整)
    目录前置知识一、什么是设计模式二、设计模式的目的七大原则原则一:单一职责原则一、案例一:交通工具问题1.问题分析2.解决思路2.1类级别单一职责2.2方法级别单一职责3.知识小结二、案例二:待更新原则二:接口隔离原则一、案例一:大接口拆分小接口1.问题分析2.......
  • 突破编程:C++中的组合模式(Composite Pattern)
    突破编程:C++中的组合模式(CompositePattern)在软件设计领域,组合模式(CompositePattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式让客户端代码可以一致地处理单个对象和组合对象,无需关心对象的具体类型,从而简化了客户端代码......
  • 工厂模式和策略模式区别
    工厂模式和策略模式是两种常见且重要的设计模式,它们在软件开发中各自扮演着不同的角色,具有显著的区别和各自的应用场景。以下将详细阐述这两种模式的区别,包括定义、结构、应用场景、优缺点等方面,以满足不少于2000字的要求。一、定义与结构1.工厂模式工厂模式(FactoryPat......
  • 设计模式反模式:UML图示常见误用案例分析
    设计模式反模式:UML图示常见误用案例分析在软件开发过程中,设计模式(DesignPatterns)作为解决常见设计问题的最佳实践,被广泛地应用于提高代码质量和可维护性。然而,当这些设计模式被误用或滥用时,它们可能会变成反模式(Anti-Patterns),导致系统架构的复杂性增加,甚至引发一系列问题......
  • 突破编程:C++中的组合模式(Composite Pattern)
    突破编程:C++中的组合模式(CompositePattern)在软件设计领域,组合模式(CompositePattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式让客户端代码可以一致地处理单个对象和组合对象,无需关心对象的具体类型,从而简化了客户端代码......
  • 游戏开发设计模式之责任链模式
    责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求,直到某个处理者决定处理该请求为止。概念与定义责任链模式的核心思想是将多个处理器以链式结构连接起来,使请求沿着链传递,直到有一个处理......