Ruby 教程 目录

Ruby 工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。通过工厂模式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向不同的子类实现,这样既使得代码结构清晰,又可以轻松地扩展新的对象而无需修改原有的代码。

工厂模式的基本概念

简单工厂

简单工厂模式并不是GoF定义的23种设计模式之一,但它确实是一个非常实用的设计模式。简单工厂模式的核心思想是:根据传入的不同参数来决定实例化哪个具体的类。

示例代码

-- -------------------- ---- -------
----- -------
---

----- ---------------- - -------
---

----- ---------------- - -------
---

----- -------------
  --- -------------------------
    ---- ----
    ---- ---
      --------------------
    ---- ---
      --------------------
    ----
      ----- -------------- -------- ------- ----- --------
    ---
  ---
---

- --------
------- - ---------------------------------

在这个例子中,SimpleFactory类根据传入的参数类型决定返回哪种类型的对象。

工厂方法

工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。

示例代码

-- -------------------- ---- -------
----- -------
  - ----------
  --- --------------
    ----- -------------------- -------------- --- --- ----------- ------ ----------------
  ---

  --- --------------
    - ----
    ------- - --------------
    - ----
    ------ - --------- --- ---- --------- ---- --- ---- ------ ---- -----------
    ------
  ---
---

----- ---------------- - -------
  --- --------------
    --------------------
  ---
---

----- ---------------- - -------
  --- --------------
    --------------------
  ---
---

- ------
--------- - --------------------
---- ------------------------

--------- - --------------------
---- ------------------------

在这个例子中,Creator类中的factory_method方法是一个抽象方法,必须由子类实现。some_operation方法则是用来调用factory_method方法并使用其结果。

抽象工厂

抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

示例代码

-- -------------------- ---- -------
------ ---------------
  ----- ----------------
  ---

  ----- ----------------
  ---

  ----- ---------------
    --- ----------------
      ----- -------------------- -------------- --- --- ----------- ------ ----------------
    ---

    --- ----------------
      ----- -------------------- -------------- --- --- ----------- ------ ----------------
    ---
  ---

  ----- ---------------- - ---------------
    --- ----------------
      ---------------------
    ---

    --- ----------------
      ---------------------
    ---
  ---

  ----- ---------------- - ---------------
    --- ----------------
      ---------------------
    ---

    --- ----------------
      ---------------------
    ---
  ---

  ----- ----------------- - ----------------
  ---

  ----- ----------------- - ----------------
  ---

  ----- ----------------- - ----------------
  ---

  ----- ----------------- - ----------------
  ---
---

- ------
-------- - -------------------------------------
---------- - -------------------------
---------- - -------------------------

-------- - -------------------------------------
---------- - -------------------------
---------- - -------------------------

在这个例子中,AbstractFactory模块定义了创建产品的接口,而ConcreteFactory1ConcreteFactory2则实现了这些接口,提供了不同的产品实现。

工厂模式的优点

  • 解耦:客户端不需要知道创建对象的具体过程。
  • 灵活性:增加新的产品类时,只需要添加相应的工厂类即可,无需修改原有代码。
  • 易于扩展:新产品的引入变得简单,只需添加相应的工厂类和产品类即可。

总结

工厂模式是一种非常有用的设计模式,它可以简化对象的创建过程,提高代码的可维护性和扩展性。无论是简单工厂、工厂方法还是抽象工厂,它们都有各自的适用场景,选择合适的工厂模式可以大大提高代码的质量和可读性。

上一篇: Ruby 单例模式
下一篇: Ruby 观察者模式
纠错
反馈