JavaScript 中常用的设计模式有哪些?

推荐答案

在 JavaScript 中,常用的设计模式包括但不限于以下几种:

  1. 单例模式(Singleton Pattern)
  2. 工厂模式(Factory Pattern)
  3. 观察者模式(Observer Pattern)
  4. 发布-订阅模式(Publish-Subscribe Pattern)
  5. 策略模式(Strategy Pattern)
  6. 代理模式(Proxy Pattern)
  7. 装饰器模式(Decorator Pattern)
  8. 适配器模式(Adapter Pattern)
  9. 模块模式(Module Pattern)
  10. 命令模式(Command Pattern)

本题详细解读

1. 单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。在 JavaScript 中,可以通过闭包或模块模式实现单例。

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

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

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

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

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

2. 工厂模式(Factory Pattern)

工厂模式提供了一种创建对象的方式,而无需指定具体的类。它通常用于创建复杂的对象。

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

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

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

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

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

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

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

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

3. 观察者模式(Observer Pattern)

观察者模式定义对象间的一对多依赖关系,当一个对象改变状态时,所有依赖它的对象都会收到通知并自动更新。

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

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

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

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

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

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

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

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

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

4. 发布-订阅模式(Publish-Subscribe Pattern)

发布-订阅模式是观察者模式的一种变体,它使用一个中介(通常称为事件总线)来管理事件的发布和订阅。

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

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

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

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

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

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

5. 策略模式(Strategy Pattern)

策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。策略模式让算法的变化独立于使用算法的客户。

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

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

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

6. 代理模式(Proxy Pattern)

代理模式为其他对象提供一个代理或占位符,以控制对这个对象的访问。

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

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

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

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

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

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

7. 装饰器模式(Decorator Pattern)

装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。

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

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

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

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

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

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

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

8. 适配器模式(Adapter Pattern)

适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。

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

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

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

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

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

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

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

9. 模块模式(Module Pattern)

模块模式用于创建私有和公共封装的方法和变量,防止污染全局命名空间。

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

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

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

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

10. 命令模式(Command Pattern)

命令模式将请求封装为对象,从而使你可以用不同的请求对客户进行参数化。

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

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

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

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

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

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

------------------------- -- ------ ---------
纠错
反馈