软件设计模式 是 对设计经验的一种经验总结,它只是告诉你,遇到这种问题的时候,可以使用这种方式更好地解决你所遇到的问题。所以设计模式充其量就是一种解决方案,也许你叫不出它的名字,但可能你天天在使用它,因为你的解决方案也是一种模式,只是有好坏之分而已。
示例代码github地址
模板模式是一种很常见的模式,当一件事件有一套明确的的流程时,我们可以对该事务进行抽象,封装成模板。
比如王婆,作为中国历史上最负盛名的媒人[成功案例:成功撮合 潘金莲与西门庆],要撮合一堆新人,王婆信手拈来讲解她的经验,要成功撮合一堆新人:
- 首先需要充分了解男女双方的喜好
- 安排双方见面互相了解
- 给男女双方互讲优点,让男女双方互有好感
- 收钱走人
让我们看看,使用代码如何实现这个模板模式:
以下是来自王婆的说媒经验,我们把它奉为法典[模板]
package com.deity.test.template;
/**
* 说媒经验模板,作者 王婆,假冒伪劣 必究法律责任
* Created by Deity on 2017/1/12.
*/
public abstract class AbsMatchMaking {
/**调查双方喜好*/
public abstract void research();
/**邀约双方会面*/
public abstract void invitation();
/**给男女双方互讲优点,让男女双方互有好感*/
public abstract void advantage();
/**获取报酬*/
public abstract void obatinMoney();
public void matchMaking(){
research();
invitation();
advantage();
obatinMoney();
}
}
王婆亲自教授小编 如何说媒
package com.deity.test.template;
/**
* 王婆 亲自出马 撮合 西门庆与潘金莲
* Created by Deity on 2017/1/12.
*/
public class XiMenQingAndPanJinLianImpl extends AbsMatchMaking {
/**
* 调查双方喜好
*/
@Override
public void research() {
System.out.println("西门庆喜欢 漂亮、36D的美女、潘金莲 喜欢有权势的男人[情报Get]");
}
/**
* 邀约双方会面
*/
@Override
public void invitation() {
System.out.println("王婆:西门庆大官人来 我王婆家看个漂亮、36D的美女呗,西门庆:好呀!如入我法眼,给你冲个企鹅VIP");
System.out.println("王婆:潘,来我家做寿衣吧,做寿衣的官人是个有权有势的大户人家,潘金莲:好呀!");
}
/**
* 给男女双方互讲优点,让男女双方互有好感
*/
@Override
public void advantage() {
System.out.println("王婆:@#$@#$$#^$%&^%*&%^*%^&%^&% 潘金莲:我对这个物品的满意度100% 西门庆:我的大刀早已饥渴难耐");
}
/**
* 获取报酬
*/
@Override
public void obatinMoney() {
System.out.println("恭喜你!获得一项成就,赠送价值288元的QQ游戏礼包,王婆:我去....");
}
}
小编在深刻学习了王婆的经验后
package com.deity.test.template;
/**
* 小编根据王婆的经验尝试撮合 读者与凤姐
* Created by Deity on 2017/1/12.
*/
public class ReaderAndFengJieImpl extends AbsMatchMaking {
/**
* 调查双方喜好
*/
@Override
public void research() {
System.out.println("凤姐:必须为北京大学或清华大学硕士毕业生。必须本科硕士连读,中途无跳级,不留级,不转校。在外参加工作后再回校读书者免等");
System.out.println("读者:我想结婚,喜欢女的");
}
/**
* 邀约双方会面
*/
@Override
public void invitation() {
System.out.println("小编对凤姐说: 读者是哈佛硕士");
System.out.println("小编对读者说: 凤姐是女的");
}
/**
* 给男女双方互讲优点,让男女双方互有好感
*/
@Override
public void advantage() {
System.out.println("小编对凤姐说: 有人符合你的要求");
System.out.println("小编对读者说: 有个女的");
}
/**
* 获取报酬
*/
@Override
public void obatinMoney() {
System.out.println("获得成就,被读者感恩戴德,获得100金");
}
}
@Test
public void templateTest(){
AbsMatchMaking 王婆 = new XiMenQingAndPanJinLianImpl();
王婆.matchMaking();
/**小编学习了王婆的经验后,跃跃欲试,毕竟有现成的模板告诉小编 怎么成为一个成功的 媒人,看小编如何撮合读者跟凤姐*/
AbsMatchMaking 小编 = new ReaderAndFengJieImpl();
小编.matchMaking();
}
注:在此并无贬低凤姐的意思,在我看来凤姐是一个很有思想深度的人,