天天看點

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

前言:我也是初學者,有不妥之處希望大家能提出意見。另外轉載請注明作者和出處,畢竟花了快一周的時間才完成。

<a href="http://www.cnblogs.com/category/33478.html?Show=All">浏覽更多設計模式與和申、紀曉岚的故事</a>

話說乾隆、和申、紀曉岚三人離京巡遊,一日來到一個村莊,村子有一戶人家住着一個漂亮姑娘和她的母親老夫人。姑娘喜歡三件事情:美食、購物、旅遊,但是這三件事情都是老夫人最厭惡的,她希望自己的女兒能做兩件事情:讀書、練字,可是姑娘一聽見這些東西就頭痛。

乾隆知道這些情況後想考察一下兩個大臣的能力,于是他給和申、紀曉岚每人三天時間,看誰能把姑娘泡到手,讓和申先來。

和申心想,這還不好辦嗎?我就投姑娘所好,Eating 、Shopping 、Travelling 三招把她搞定。和申他們有的是錢,第一天下來,姑娘非常滿意,沒想到老夫人火了,把和申臭罵了一頓,說他是個不學無術的小混混,從此再不讓進門。和申的泡妞計劃以失敗告終。

紀曉岚心想,我可不能像和申那樣,我要先和姑娘約定好暗号,出門的時候要說老夫人愛聽的,實際上做的是姑娘愛做的,說一套做一套,這樣兩個人都可以搞定了。暗号如下:

Reading:老夫人以為是去讀書,實際上出了門就去 Eating 和 Shopping 了

Writing:老夫人以為是去練字,實際上出了門就去 Travelling 了

這套暗号約定實際上就是個擴充卡。它把對外的接口從姑娘希望的 Eating 、Shopping 、Travelling 變成了老夫人希望的 Reading 和 Writing ,這樣就可以順利通過老夫人這一關了;但實際上做的還是姑娘希望的 Eating 、Shopping 、Travelling ,這樣姑娘也滿意。

哈哈,這應該就是投其所好,說一套做一套了吧!事情從表面上看是一回事,實際上内部的實作可能是另一回事。最後當然是紀曉岚赢得了芳心。

下面我們用代碼來講述這個故事吧:

Adapter.cs

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

using System;

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

using System.Collections.Generic;

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

using System.Text;

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

namespace Adapter

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

...{

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    //姑娘希望的接口:但是由于老夫人不喜歡這些東西,不能直接使用了

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    public class Girl

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    ...{

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        public void  Eating()

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        ...{

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            System.Console.WriteLine("不用裝樣子了,我要吃大閘蟹!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            System.Console.WriteLine();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        }

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        public void  Shopping()

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            System.Console.WriteLine("不用裝樣子了,買一件今年最流行的小背心!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        public void  Travelling()

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            System.Console.WriteLine("不用裝樣子了,後山是個不錯的地方哦!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    }

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    //老夫人希望的接口:要想約姑娘出來,必須告訴老夫人,我們是去做您喜歡的事情去了

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    public interface Mother

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        void Reading();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        void Writing();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    //紀曉岚和姑娘的約定,精髓就是客戶喜歡什麼就讓他看見什麼,實際上做的還是原來的那一套東西

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    public class Agreement : Mother

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        Girl girl = new Girl();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        //說的是去讀書,那是給老夫人(用戶端)看的,實際上呢?

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        public void Reading()

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            girl.Eating();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            girl.Shopping();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        public void Writing()

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            girl.Travelling();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

}

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

用戶端:Client.cs

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

    class Client

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

        static void Main(string[] args)

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            Agreement ag = new Agreement();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            Console.WriteLine("紀曉岚:老夫人,我們去讀書了!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            Console.WriteLine("老夫人:乖,好好讀呀!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            ag.Reading();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            Console.WriteLine();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            Console.WriteLine("紀曉岚:老夫人,我們去練字了!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            Console.WriteLine("老夫人:好呀好呀!");

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            ag.Writing();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

            System.Console.Read();

擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)
擴充卡模式 — Adapter Pattern — 和申、紀曉岚泡妞比賽的故事(原創)

運作結果如下圖:

本文轉自左洸部落格園部落格,原文連結:http://www.cnblogs.com/myqiao/archive/2005/09/09/233343.html,如需轉載請自行聯系原作者

繼續閱讀