浏览:6402007-11-28 11:22   来自彭成刚      :

休息了两天。。俺又回来了。。忽然发现 设计模式小组(http://space.cnblogs.com/group/mode/)被升为 特色推荐小组,朕甚是欣慰啊。。o(∩_∩)o... 吼吼。。闲话不多说了。。进入今天的正题。。

啥子叫适配器模式啊。。
比如说那个电源的插头吧,他们都是有规格的。。你三项插头插不到两项的被。。那你三项的非要插到两项的。。怎么办啊。。那就用个中转的东东来作为中间件吧。。套上三项的,接出来个两项的,就能插到那个两项的插座了被。。

看看定义。。吼吼。。
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。就好像标题说的那样 一只看起来像鸭子的火鸡。。但是俺还不想举这个例子,为啥子尼。。毕竟是搞web.net开发,所以

俺想例子还是以网络开发的例子为主还是比较容易引起咱们web开发人员的兴趣的。。

一个夜黑风高的夜晚。。故事就这样开始了。。
“头儿,听说博客园要征召新闻发布系统的开发程序,公开招标啊。。”小菜说。。“是啊,那咱把咱自己的新闻发布给他们发过去一套就KO了,看看能夺标不。。没夺上也不可惜。。嘎嘎”老板心中暗笑。。还有这样的好事。。
“不好拉,刚发现博客园的招标截至时间马上就到了,还有3个小时就结束了,而且人家用的统一的接口,和咱们的接口完全不一样啊,从新开发时间肯定不够,而且临时开发出来的东西肯定也比不上人家多年开发的结果了”小菜心灰意冷的说。。
“难道你没听说过设计模式里有一个设计模式,叫适配器模式吗。。去做一个中转的接口,一端是博客园的新闻接口,一边是咱们新闻的接口,中间一插不就KO了吗。。估计有一个来小时就搞定了。。还不快去。。我还等着中标呢。。”老板焦急的说。。
“啊。。我怎么把它给忘了呢。。还是老板有仙剑知名啊。。我对老板的佩服犹如滔滔江水连绵....”小菜说着,只感觉到有人背后一脚。。“还不赶紧去给我干活。。又来这套。。”“哦。。收到。。头儿..”

三天后。。
“头。。咱中标拉。。还是您的方法好,30多家网络公司,有两家中标啦。。其中就有咱。。看来实力才是最有竞争的最佳手段啊!!”小菜很是兴奋。。
“那博客园承诺的笔记本什么时候拿来啊。。”“当时那个奖品是偏你的啦。。o(∩_∩)o...哈哈”小菜说完一溜烟的就跑了。。
------------------------------------------
看来俺还是有写故事的本事的。。嘎嘎。。
下面为公司的竞标代码:o(∩_∩)o...

 //博客园招标大赛的对外接口
 public interface cnblogsNews {
  string displayNews(string classId);
  string displayUserInfo(string UserId);
  string siteInfo();
 }

 //彭彭公司网站新闻发布的接口
 public interface ppNews {
  string ppNews(string class_id);
  string ppUserInfo(string user_id);
  string ppInfo(string siteName);
 }

 //彭彭公司的类
 public class News : ppNews
 {
  #region ppNews 成员

  public string ppNews(string class_id)
  {
   // TODO:  添加 News.ppNews 实现
   return "栏目classId为:"+class_id+"<br>";
  }

  public string ppUserInfo(string user_id)
  {
   // TODO:  添加 News.ppUserInfo 实现
   return "用户信息的Id为:"+user_id+"<br>";
  }

  public string ppInfo(string siteName)
  {
   // TODO:  添加 News.ppInfo 实现
   return "网站信息:"+siteName+"<br>";
  }

  #endregion

 }

 //小菜为公司招标所写的新闻发布适配器
 public class ppNewsAdapter : cnblogsNews
 {
  News news;
  
  public ppNewsAdapter(News news)
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
   this.news = news;
  }

  #region cnblogsNews 成员

  public string displayNews(string classId)
  {
   // TODO:  添加 ppNewsAdapter.displayNews 实现
   return news.ppNews(classId);
  }

  public string displayUserInfo(string UserId)
  {
   // TODO:  添加 ppNewsAdapter.displayUserInfo 实现
   return news.ppUserInfo(UserId);
  }

  public string siteInfo()
  {
   // TODO:  添加 ppNewsAdapter.siteInfo 实现
   return news.ppInfo("zzcn.net");
  }

  #endregion

 }
------------------------------------
页面调用代码:
private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   News news = new News();//创建了自己公司的新闻对象
   cnblogsNews cnbn = new ppNewsAdapter(news);
   testCnblogsNews(cnbn);

  }

  public void testCnblogsNews(cnblogsNews cnbn)
  {
   this.Page.Response.Write(cnbn.displayNews("32"));
   this.Page.Response.Write(cnbn.displayUserInfo("58"));
   this.Page.Response.Write(cnbn.siteInfo());
  }
------------------------------------
网页输出内容:(Vs2003 下编译成功)

栏目classId为:32
用户信息的Id为:58
网站信息:zzcn.net
------------------------------------
今天又写了一个模式的小故事。。吼吼。。感觉写的多了的时候,发现,很多时候,接口太重要了。。几乎没个模式都有

接口存在。。所以基本功还是非常非常重要的哦。。嘎嘎。。

楼主
  9个月前   shengnet      :
支持呀!哦想
1楼 回到顶楼 
  9个月前   伍迷      :
好好加油,:)
2楼 回到顶楼 
  9个月前   没剑      :
有代码有讲解,很是生动啊~很不错啊,支持你!!!!
什么时候讲其它模式啊?我一定会来光临的!
3楼 回到顶楼 
  9个月前   melody.gao      :
朕甚是欣慰啊。。听着很耳熟嘛……
4楼 回到顶楼 
  9个月前   彭成刚      :
我会努力的。。o(∩_∩)o... 感谢社会各界的支持哦。。嘎嘎。。
5楼 回到顶楼 
  9个月前   金色海洋(jyk)      :

字数少了还不行呀。
6楼 回到顶楼 
  9个月前   斧头帮少帮主      :
代码格式太乱,不易阅读,以至我还想楼主这篇是Blog看着就舒服多了.
要是有写Blog的那个文本编辑器就好了 :-)

另:接口请以 I 打头, 类名,方法名首字母大写,行业规矩不能丢.
public interface cnblogsNews

public interface ICnblogsNews
7楼 回到顶楼 
  9个月前   彭成刚      :
感谢高手提醒。。
代码写的挺好的。。不过。。copy过来就走行了。。
----------------------------------
另:接口请以 I 打头, 类名,方法名首字母大写,行业规矩不能丢.
public interface cnblogsNews

public interface ICnblogsNews
----------------------------------
这段收了。。刚才改了。。太不好改。。就没改了。。以后注意了。。
o(∩_∩)o...

8楼 回到顶楼 
  9个月前   bluebird      :
你应该去写小说了,哈哈,老外的书看多了吧
9楼 回到顶楼 

注册用户登录后才能回复,登录注册
> 返回“设计模式”


其他话题

相关链接
1 26752