在前一篇文章一个示例让你明白适配器模式中,详细介绍了适配器模式,本文以实际项目中遇到的问题来演示适配器模式的实际应用。
原来的项目中使用到了一个类ESPMenu,该类的代码很简单:
public class ESPMenu { private String id; private String caption; private String normalIcon; private String selectedIcon; private String viewType; private String icon private String content; public String getId() { return id; } public String getCaption() { return caption; } public String getNormalIcon() { return normalIcon; } public String getViewType() { return viewType; } public String getSelectedIcon() { return selectedIcon; } public String getIcon() { return icon; } public String getContent() { return content; } }
<node id="my_task" caption="任务" selectedIcon="myTask.png" normalIcon="myTask_n.png"/>
目前,项目原有接口指的就是这个类了。这里要做一个说明:并不是只有实现一个interface才叫接口, 这里所说的接口是广义上的接口概念,能被外界访问到的部分都可以称作接口。 比如ESPMenu中有一个公共方法getIcon(), 这个方法就可以称作接口的一部分,因为它能被外界访问。
<node id="xinwen" caption="新闻" normalIcon="/images/icons/mobile/myHome.png" viewType="webView" url="3g.sina.com.cn"/>
public Object getObject(Object Key) {
public interface ESPMenu { public String getId(); public String getCaption(); public String getNormalIcon(); public String getViewType() ; public String getSelectedIcon() ; public String getIcon() ; public String getContent() ; public Object getObject(Object key); }
/*package*/class ESPMenuImpl implements ESPMenu{ private StubObject stubObj; public ESPMenuImpl(StubObject stubObj) { this.stubObj = stubObj; } @Override public String getId() { return (String) stubObj.getObject("id"); } @Override public String getCaption() { return (String)stubObj.getObject("caption")); } @Override public String getNormalIcon() { return (String)stubObj.getObject("normalIcon")); } @Override public String getViewType() { return (String) stubObj.getObject("viewType"); } @Override public String getSelectedIcon() { return (String) stubObj.getObject("selectedIcon"); } @Override public String getIcon() { return (String) stubObj.getObject("icon"); } @Override public String getContent() { return (String) stubObj.getObject("content"); } @Override public Object getObject(Object key) { return stubObj.getObject(key, ""); } }
设计上的事就是这样,想到了, 就能比较优雅的解决问题,想不到的话, 就只能使用到处修改代码的方法比较笨拙的应对问题,还容易将项目弄的混乱。现在我比较庆幸当初学习了设计模式,而没有听其他人的“建议”, 很多人都说“我们做的项目中用不到设计模式,学这个没用”。关于学习这个问题在我的另一篇博客 我为什么要学习Linux?中提到过。设计模式是个好东西,以后我肯定还会进一步的学习,并且在项目中多实践,提升自己的设计能力。
其实设计模式并不难,难的是真正领悟他的精妙,并且能灵活的运用于日常项目的开发。
原文:http://blog.csdn.net/zhangjg_blog/article/details/18779607