国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Design Pattern的萬劍歸宗 => Mediator

yuanzhanghu / 2939人閱讀

摘要:大意就是作者把種不斷的重組歸納抽象直道最后抽象為一種設(shè)計模式,。而所有的關(guān)注的核心問題就是如何控制信息流但是我個人認(rèn)為核心是如何解耦。再根據(jù)信息流劃分出對象在系統(tǒng)中擔(dān)任的種角色,。所以歸為一種核心所有的的職責(zé)都是控制。

Overview

今天看了YouTube上的一個講Design Pattern的視頻,把這個視頻的大意給大家分享一下,該視頻的作者是Anthony Ferrara。
大意就是作者把22種Design Pattern不斷的重組歸納抽象直道最后抽象為一種設(shè)計模式,Mediator。
而所有的Design Pattern關(guān)注的核心問題就是如何控制信息流(但是我個人認(rèn)為核心是如何解耦)。再根據(jù)信息流劃分出對象在系統(tǒng)中擔(dān)任的5種角色,Representer, Doer, Dispatcher, Translator, Maker。

大概就是以上的內(nèi)容,但是具體如何實踐還不太清楚。。。


演變過程 Re-grouped

GoF Design Pattern分類 v.s 作者分類


Creational Structural Behavioral
Shim Abstract Factory
Object Pool
Prototype
Flyweight
Iterator
Null Object
Compositional Builder
Adapter
Composite
Decorator
Facade
Proxy
Interpreter
Mediator
Observer
Decompositional Factory Method Bridge
Composite
Proxy
Chain of Responsibility
Command
Mediator
Memento
Observer
Strategy
Template Method

如表格所示,GoF把26種設(shè)計模式分為了Creational, structural和Behavioral三大類。

而作者把設(shè)計模式按照Shim, Compsitional, Decompsitional分類

Shim Patterns: 編程語言不能處理當(dāng)前情況
例子:iterator模式,沒有其他的方法能夠更方便的遍歷對象的時候,就會使用iterator模式。

Compositional Patterns:要把一系列的object組合在一起

Decompositional Patterns: 要把一個object拆分成多個object

要注意的是有些模式在多個分類里, 比如Mediator既可以用于組合模式又可以用于拆分模式。

由于現(xiàn)有的26種模式,有些模式彼此之間很難分辨區(qū)別。

如: Adapter, Facade, Bridge, Decorator, Proxy

如圖所示,UML結(jié)構(gòu)相同。

代碼例子:
Adapter
要把已有的系統(tǒng)watchdog插入系統(tǒng)PSRLogger中,在log函數(shù)中,舊的接口(watchdog)被轉(zhuǎn)換成了新的接口(log)。
用這個方法可以把watchdog插入任何系統(tǒng)。

phpuse PsrLogLoggerInterface as Log
class PSR3Logger implements Log {
    public function log ($level, $msg, array $ctx = array())
    {
        $severity = $this->convertLevelToSeverity($level);
        watchdog("unknown", $msg, $ctx, $severity);
        }
    /* ... */
}

Facade
把一個復(fù)雜的系統(tǒng)轉(zhuǎn)換成一個簡單的接口。

phpclass EntityMetadataWrapper {
    public function __construct($type, $data = null, $info = array())
    {
        $this->type = $type;
        $this->info = $info + array(
            "langcode" => null,
        );
        $this->info["type"] = ¥type;
        if (isset($data)) {
            $this->set($data);
        }
    }
    /* ... */
}

抽象一下過程
把已有代碼用于其他代碼中,而設(shè)計模式提供的就是這個轉(zhuǎn)化的過程

由于結(jié)構(gòu)相同,差別比較細(xì)微,把這5種歸為一種,用adapter作為代表。
同理把其他design pattern按UML相似合并,有以下表格

De-duplicated Grouping

Creational Structural Behavioral
Compositional
Adapter
Composite
Mediator
Observer
Decompositonal
Adapter
Composite
Observer

這里除去重復(fù)的只有6種pattern。

Adapter - This has a single class which makes one or more other classes behave as a single interface.

Composite - This abstracts a recursive structure.

Command - This abstracts determination of execution from actual execution

Mediator - This abstracts communication between several objects

Memento - This abstracts state representation from execution

Observer - This abstracts communication between two objects

如果按照Information Flow的傳遞來分,有三種

Controlling Information Flow Between Multiple Systems (多系統(tǒng)間)

Controlling Information Flow Within An Individual System (單系統(tǒng))

Controlling Information Flow Between Individual Objects (object之間)

De-Duplicated Re-Groupings

下面開始繼續(xù)簡化


Multiple Systems? Single System? Single Objects?
Information Flow? Mediator Command Observer
Structure Adapter Composite Memento

注意:information flow 和 structure是相對的。

再簡化

DeDe-Duplicated Re-Groupings

Pattern
Information Flow? Mediator
Structure Adapter

最終簡化

DeDe-Duplicated ReRe-Groupings

information flow和structure其實是一種概念的不同表達(dá)形式,例如list,可以傳遞信息作為input,output,也可以作為一種數(shù)據(jù)結(jié)構(gòu)。所以歸為一種


Pattern
Information Flow? Mediator

核心
所有的Design Pattern的職責(zé)都是控制information flow。

然而故事到這里并沒有完。
下面關(guān)于information flow還有l(wèi)ogic(變量)和message(即input和output,可以是string,array,object等等)的區(qū)別

Information Flow

Logic Hybrid Message
Purpose Behavior General Code State
State Stateless Stateful Stateful
Paradigm Functional OOP? Data
Information Flow傳遞方式

信息流的傳遞方式可以歸納為三種:Ask(類似get方法), Tell(類似set方法), Translate(input=>output).

Ask

$msg = $obj->something();

Logic Hybrid Message
No Yes Yes
Tell

$obj->something($msg);

Logic Hybrid Message
No Yes Yes
Translate

$msg2 = $obj->do($msg1);

Logic Hybrid Message
Yes Yes No

Note:

ask總是有狀態(tài)

tell總是有狀態(tài)

translate可以是有狀態(tài)也可以是無狀態(tài)的

Object Role Patterns

按Object角色role來分,一共5種:Representer, Doer, Dispatcher, Translator, Maker

Representer
phpclass User {
    public function getName(); //ask
    public function isAdmin();
    public function setName($name); //tell
}
Doer
phpclass EmailSystem {
    /**
    * @return boolean
    */
    public function send(Message $msg); //tell
}
Dispatcher
phpclass Controller {
    /**
    * @return Response
    */
    public function handle(Request $req); //translate
}
Translator
phpclass UserView {
    /**
    * @return string HTML
    */
    public function render(User $user);//translate
}
Maker
phpclass UserFactory {
    /**
    * @return User a user object
    */
    public function getUser();//ask
}

State? Logic? Mode
Representer User No Ask/Tell
Doer No Yes Tell
Dispatcher System No Translate
Translator No Yes Translate
Maker System Yes Ask

作者的開發(fā)經(jīng)驗得出有95%~99%的應(yīng)用可以用以上模式表達(dá)。

文章還會繼續(xù)修改,有興趣的同學(xué)可以直接觀看YouTube上的視頻,我在reference里面給出了鏈接,還有作者的blog,但是blog中只有前半部分內(nèi)容。
我個人對于design pattern的理解也很有限,希望各位大神賜教。另外關(guān)于一些單詞的具體含義,我只能意會不能言傳。。。如果有大神愿意仔細(xì)解讀的話,可以留言。
同步更新在我的gitbook筆記中。

Reference

Beyond Design Pattern 視頻

視頻作者blog

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21004.html

相關(guān)文章

  • gulp和webpack初探

    摘要:首先聲明一下,和兩者關(guān)系不大,主要是團(tuán)隊之前一直用構(gòu)建工具,這幾天業(yè)務(wù)上比較清閑,老大讓我學(xué)學(xué)新的和這些潮流工具,于是草草研究了一天,記一些筆記。最后使用將各個組件打包在一起。 首先聲明一下,gulp和webpack兩者關(guān)系不大,主要是團(tuán)隊之前一直用grunt構(gòu)建工具,這幾天業(yè)務(wù)上比較清閑,老大讓我學(xué)學(xué)新的gulp和webpack這些潮流工具,于是草草研究了一天,記一些筆記。 gulp...

    jhhfft 評論0 收藏0
  • 一起學(xué)設(shè)計模式 - 中介者模式

    摘要:在地球上最大的中介者就是聯(lián)合國了,它主要用來維護(hù)國際和平與安全解決國際間經(jīng)濟(jì)社會文化和人道主義性質(zhì)的問題。所以對于關(guān)系比較復(fù)雜的系統(tǒng),我們?yōu)榱藴p少對象之間的關(guān)聯(lián)關(guān)系,使之成為一個松耦合系統(tǒng),我們就需要使用中介者模式。 中介者模式(Mediator Pattern)屬于行為型模式的一種,用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨...

    denson 評論0 收藏0
  • 常用設(shè)計模式

    摘要:工廠設(shè)計模式工廠設(shè)計模式,主要用于進(jìn)行實例化對象時的解耦操作,避免使用關(guān)鍵字實例化對象,通過反射,根據(jù)類名稱動態(tài)創(chuàng)建對象示例靜態(tài)工廠模式構(gòu)造方法私有化獲取指定類名稱的對象動態(tài)代理模式動態(tài)代理模式,主要用于對同一接口子類的相同邏輯進(jìn)行代理操作 工廠設(shè)計模式 工廠設(shè)計模式,主要用于進(jìn)行實例化對象時的解耦操作,避免使用new關(guān)鍵字實例化對象,通過反射,根據(jù)類名稱動態(tài)創(chuàng)建對象 示例: pa...

    fizz 評論0 收藏0
  • PHP 設(shè)計模式概述

    摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設(shè)計模式(Design pattern)是什么 設(shè)計模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設(shè)計的經(jīng)驗總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設(shè)計模式 在軟件開發(fā)過...

    IntMain 評論0 收藏0
  • 設(shè)計模式

    摘要:設(shè)計模式目的為了代碼可重用性讓代碼更容易被他人理解保證代碼可靠性設(shè)計原則設(shè)計原則是設(shè)計模式為了達(dá)到其目的,所實現(xiàn)的一些準(zhǔn)則。 設(shè)計模式簡介 1.什么是設(shè)計模式 設(shè)計模式對是經(jīng)驗的總結(jié),是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。代表了最佳的實戰(zhàn)。 2.提出及GOF 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnso...

    enrecul101 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<