2007-07-19
(5) 结构模式之 Proxy 模式
关键字: patterns, 模式
Y先生最近的活动特别多,什么出差了,和朋友一起吃饭啦,等等。所以,他经常从家里拿钱。
Q女士过了一段时间发现,家里的钱进出得非常快,她决定和Y先生谈一谈。
Q女士:老公,咱家的钱最近进出特别频繁,要不我们记账怎么样?
Y先生:好啊,我早就有这个想法了。可是我们怎么做呢?
Q女士:嗯,让我想一下,看下面的:
java 代码
- public interface IAccount {
- public void recordSaveMoney(double money);
- public void recordCostMoney(double money);
- }
Y先生:嗯,我们先定义了一个接口。我知道该怎么做了!
java 代码
- public class ManageAccount implements IAccount {
- public void recordSaveMoney(double money) {
- // TODO Auto-generated method stub
- }
- public void recordCostMoney(double money) {
- // TODO Auto-generated method stub
- }
- }
Q女士:嗯,你变得越来越聪明了!
Y先生:可是,老婆,即使这样,如果我取钱的时候,也可能会忘记调用这个东西来记账的。
Q女士:嗯,你说的这个确实是个问题。。。不过这样的问题难不倒我。。。之前我们取钱,存钱用的是下面的方式吧:
java 代码
- public interface IHomeMoney {
- public void getMoney(double money);
- public void saveMoney(double money);
- }
java 代码
- public class SampleHomeMoney implements IHomeMoney {
- public void getMoney(double money) {
- // TODO Auto-generated method stub
- }
- public void saveMoney(double money) {
- // TODO Auto-generated method stub
- }
- }
Y先生:嗯,上面这个是用来取钱,存钱用的,可是这有什么用呢?我仍然有可能忘记去记账。
Q女士:别急,看我下面的做法:
java 代码
- public class ManageAccount implements IHomeMoney {
- private IHomeMoney homeMoney;
- public ManageAccount(IHomeMoney homeMoney) {
- // TODO Auto-generated constructor stub
- this.homeMoney = homeMoney;
- }
- private void recordSaveMoney(double money) {
- // TODO Auto-generated method stub
- }
- private void recordCostMoney(double money) {
- // TODO Auto-generated method stub
- }
- public void getMoney(double money) {
- // TODO Auto-generated method stub
- recordCostMoney(money);
- homeMoney.getMoney(money);
- }
- public void saveMoney(double money) {
- // TODO Auto-generated method stub
- recordSaveMoney(money);
- homeMoney.saveMoney(money);
- }
- }
Y先生:恩,我明白了,我用如下的方式取钱,存钱就可以了:
java 代码
- public static void main(String[] args) {
- IHomeMoney homeMoney = new ManageAccount(
- new SampleHomeMoney());
- homeMoney.saveMoney(100);
- homeMoney.getMoney(100);
- }
Q女士:嗯,不错!这个 ManageAccount 就好像一个代理,你以后就通过这个类来取钱,存钱吧!
恩,,,其实这个名字叫 HomeMoneyProxy 或许更好!
Y先生:好的,这样我也不必修改取钱,存钱的接口了!可是,我有一个问题,你刚才使用的那个 IAccount 好像没用了?
Q女士:当然了!有些需求,只有到实际的阶段才会发展成更好的设计!“源代码就是设计”听过没?
Y先生一边擦汗一边说:没有、、我这就去学习学习.
发表评论
- 浏览: 144950 次

- 详细资料
搜索本博客
我的相册
tdd
共 3 张
共 3 张
最新评论
-
网站的静态页面生成方案
笑 喘 写道yananay 写道 把对 index.do 请求后的结果保存成一个 ...
-- by tianmo2008 -
网站的静态页面生成方案
我曾经尝试过在ASP.NET中做这样的事情,用某户访问某个页面时,先从配置里读取 ...
-- by 活靶子 -
网站的静态页面生成方案
对于CMS静态发布,我用的是用Veocity模板去 生产的,根据一定的业务逻辑去 ...
-- by pablo3518 -
聊聊大连新的残疾人制度
政府张口要钱,什么理由已经不重要了。。。
-- by issppt -
请先不要讨论细节好吗
[quote="ayis"][quote="kimmking"][quote=" ...
-- by gzstyxb






评论排行榜