适配器模式 — Adapter Pattern — 和申、纪晓岚泡妞比赛的故事(原创)

简介:
前言:我也是初学者,有不妥之处希望大家能提出意见。另外转载请注明作者和出处,毕竟花了快一周的时间才完成

浏览更多设计模式与和申、纪晓岚的故事

话说乾隆、和申、纪晓岚三人离京巡游,一日来到一个村庄,村子有一户人家住着一个漂亮姑娘和她的母亲老夫人。姑娘喜欢三件事情:美食、购物、旅游,但是这三件事情都是老夫人最厌恶的,她希望自己的女儿能做两件事情:读书、练字,可是姑娘一听见这些东西就头痛。

乾隆知道这些情况后想考察一下两个大臣的能力,于是他给和申、纪晓岚每人三天时间,看谁能把姑娘泡到手,让和申先来。

和申心想,这还不好办吗?我就投姑娘所好,EatingShoppingTravelling 三招把她搞定。和申他们有的是钱,第一天下来,姑娘非常满意,没想到老夫人火了,把和申臭骂了一顿,说他是个不学无术的小混混,从此再不让进门。和申的泡妞计划以失败告终。

纪晓岚心想,我可不能像和申那样,我要先和姑娘约定好暗号,出门的时候要说老夫人爱听的,实际上做的是姑娘爱做的,说一套做一套,这样两个人都可以搞定了。暗号如下:

Reading:老夫人以为是去读书,实际上出了门就去 EatingShopping

Writing:老夫人以为是去练字,实际上出了门就去 Travelling

这套暗号约定实际上就是个适配器。它把对外的接口从姑娘希望的 EatingShoppingTravelling 变成了老夫人希望的 Reading Writing ,这样就可以顺利通过老夫人这一关了;但实际上做的还是姑娘希望的 EatingShoppingTravelling ,这样姑娘也满意。

哈哈,这应该就是投其所好,说一套做一套了吧!事情从表面上看是一回事,实际上内部的实现可能是另一回事。最后当然是纪晓岚赢得了芳心。

下面我们用代码来讲述这个故事吧:

Adapter.cs

None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
None.gif
namespace Adapter
ExpandedBlockStart.gifContractedBlock.gif
...{
InBlock.gif   
//姑娘希望的接口:但是由于老夫人不喜欢这些东西,不能直接使用了
InBlock.gif
    public class Girl
ExpandedSubBlockStart.gifContractedSubBlock.gif   
...{
InBlock.gif       
public void  Eating()
ExpandedSubBlockStart.gifContractedSubBlock.gif       
...{
InBlock.gif            System.Console.WriteLine(
"不用装样子了,我要吃大闸蟹!");
InBlock.gif            System.Console.WriteLine();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif       
public void  Shopping()
ExpandedSubBlockStart.gifContractedSubBlock.gif       
...{
InBlock.gif            System.Console.WriteLine(
"不用装样子了,买一件今年最流行的小背心!");
InBlock.gif            System.Console.WriteLine();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif       
public void  Travelling()
ExpandedSubBlockStart.gifContractedSubBlock.gif       
...{
InBlock.gif            System.Console.WriteLine(
"不用装样子了,后山是个不错的地方哦!");
InBlock.gif            System.Console.WriteLine();
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif   
//老夫人希望的接口:要想约姑娘出来,必须告诉老夫人,我们是去做您喜欢的事情去了
InBlock.gif
    public interface Mother
ExpandedSubBlockStart.gifContractedSubBlock.gif   
...{
InBlock.gif       
void Reading();
InBlock.gif       
void Writing();
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif   
//纪晓岚和姑娘的约定,精髓就是客户喜欢什么就让他看见什么,实际上做的还是原来的那一套东西
InBlock.gif
    public class Agreement : Mother
ExpandedSubBlockStart.gifContractedSubBlock.gif   
...{
InBlock.gif        Girl girl
= new Girl();
InBlock.gif
InBlock.gif       
//说的是去读书,那是给老夫人(客户端)看的,实际上呢?
InBlock.gif
        public void Reading()
ExpandedSubBlockStart.gifContractedSubBlock.gif       
...{
InBlock.gif            girl.Eating();
InBlock.gif            girl.Shopping();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif       
public void Writing()
ExpandedSubBlockStart.gifContractedSubBlock.gif       
...{
InBlock.gif            girl.Travelling();
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

客户端:Client.cs

None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
None.gif
namespace Adapter
ExpandedBlockStart.gifContractedBlock.gif
...{
InBlock.gif   
class Client
ExpandedSubBlockStart.gifContractedSubBlock.gif   
...{
InBlock.gif       
static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif       
...{
InBlock.gif            Agreement ag
= new Agreement();
InBlock.gif
InBlock.gif            Console.WriteLine(
"纪晓岚:老夫人,我们去读书了!");
InBlock.gif            Console.WriteLine(
"老夫人:乖,好好读呀!");
InBlock.gif            ag.Reading();
InBlock.gif            Console.WriteLine();
InBlock.gif
InBlock.gif            Console.WriteLine(
"纪晓岚:老夫人,我们去练字了!");
InBlock.gif            Console.WriteLine(
"老夫人:好呀好呀!");
InBlock.gif            ag.Writing();
InBlock.gif
InBlock.gif            System.Console.Read();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

运行结果如下图:










本文转自左洸博客园博客,原文链接:http://www.cnblogs.com/myqiao/archive/2005/09/09/233343.html,如需转载请自行联系原作者

目录
相关文章
|
11月前
|
设计模式 缓存 Java
认真学习设计模式之建造者模式(Builder Pattern)
认真学习设计模式之建造者模式(Builder Pattern)
95 1
|
5月前
|
设计模式
二十三种设计模式全面解析-原型模式(Prototype Pattern)详解:创造对象的奇妙之道
二十三种设计模式全面解析-原型模式(Prototype Pattern)详解:创造对象的奇妙之道
|
5月前
|
设计模式 Java 关系型数据库
认真学习设计模式之适配器模式(Adapter Pattern)/包装器模式
认真学习设计模式之适配器模式(Adapter Pattern)/包装器模式
126 0
|
11月前
|
设计模式 Java 数据库连接
认真学习设计模式之委派模式(Delegate Pattern)
认真学习设计模式之委派模式(Delegate Pattern)
44 0
|
设计模式
从零开始学设计模式(十八):状态模式(State Pattern)
状态模式(State Pattern)指的是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,在其内部状态改变时改变它的行为。状态模式是一种对象行为型模式。它和策略模式有一点很像,就是将一些复杂的逻辑放在一个专门的上下文类中进行处理。
1195 0
从零开始学设计模式(十八):状态模式(State Pattern)
|
设计模式 算法 容器
从零开始学设计模式(十三):访问者模式(Visitor Pattern)
前面的几篇文章分别介绍了创建型设计模式和结构型设计模式,接下来的几篇文章将介绍行为型设计模式
164 0
从零开始学设计模式(十三):访问者模式(Visitor Pattern)
|
设计模式 前端开发
从零开始学设计模式(十四):中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)又被称为调停者模式。它定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。它是一种对象行为型模式。
223 0
从零开始学设计模式(十四):中介者模式(Mediator Pattern)
|
设计模式 Java Android开发
从零开始学设计模式(六):适配器模式(Adapter Pattern)
前面的几篇文章分别介绍了设计模式中的创建型设计模式,它们分别是:
433 0
从零开始学设计模式(六):适配器模式(Adapter Pattern)