门面模式的理解

写程序,现实中会用到很多不同的方法,我们会尽力的让程序达到高内聚,低耦合的要求。前人做了很多工作,总结出了一些套路,也就是设计模式。java程序中有23中设计模式,也就是大概23中前人的套路,为什么要学习这些,编程这东西,前人已经踩过的坑,我们当然要避免。前两年一个朋友推荐了一个前辈的经验,我在逐步的学习,才发现实际中我们有很多已经用到了,只是不知道,所以好好看看还是有很多好处的。今天把看“门面模式”的一些理解记录下来。

门面模式

刚听到这个名字,实在想不到是一个什么样的东西,“门面”?实际中我们会这样写代码:

有一个功能实现,我们要给别人写信,这个功能要实现,我们要经过:写信在信纸上,在填写信封地址信息,在把信装到信封,最后贴邮票邮寄四个步骤。基本上这个步骤是不能变的,变了信就寄不到对方了。

我们定义一个借口LetterProcess封装这四个步骤:

public writeContent(String content);
public writeEnvelope(String address);
public putContentIntoEnvelope();
public sendLetter()
然后我们实现这个过程LetterProcessImpl

public writeContent(String content){
       Log.e(TAG,"写信给远方的朋友"+content);
}
public writeEnvelope(String address){

      Log.e(TAG,"填写信封信息,地址:"+address);
}
public putContentIntoEnvelope(){
       Log.e(TAG,"把信装进信封");
}
public sendLetter(){
       Log.e(TAG,"贴邮票,寄信给朋友!");
}

在客户端中创建对象调用方法:

LetterProcess letterProcess = new LetterProcessImpl();

letterProcess.writeContent("朋友,好久不见,你还好吗");
letterProcess.writeEnvelope("北京市朝阳区,朝阳群众收");
letterProcess.putContentIntoEnvelope();
letterProcess.sendLetter();
这样就完成了一次写信。这个过程和高内聚的要求也相差甚远,我们可以看到,这个过程的四个步骤要是错了,这个需求就是没有意义的了,或者信寄不到。整个写信过程写信人最辛苦。加入我们要同时面对几百人,写就不可想象了。但是有一天有一个公司,提供了一个服务,只要你提供了信的内容和地址信息,就可以帮你寄到,其他的你就不用管了,万一你要给很多人写同一封信,自己写可能会累死。我们让这个公司可以帮我们办了。公司这么干呢?

公司就是对上面的四个过程分装了一下,我们只需要传入内容和地址就可以了,写一个类ModeLetterOffice。这就是门面模式,增加了一个门面,方便我们操作。其他的处理过程都没有变。

//创建写信过程
LetterProcess letterProcess = new LetterProcessImpl();

public sendLetter(String address,String content){
        //帮你写信内容
	letterProcess.writeContent("朋友,好久不见,你还好吗");
        //填写地址
	letterProcess.writeEnvelope("北京市朝阳区,朝阳群众收");
        // 装进信封
	letterProcess.putContentIntoEnvelope();
        寄信
	letterProcess.sendLetter(); 

}
我们传递给他们地址和信的内容就好了,帮我们寄到。这样就不担心万一顺序错了怎么办。

ModeLetterOffice modelLetterOffice = new ModeLetterOffice();
modelLetterOffice .sendLetter("北京市朝阳区,朝阳群众收","有人聚众吸毒");
要是我们有一天要增加一个功能,外地人寄信到首都的信要接受检查:我们要增加一个安检人员安检处理类SecurityCheck
public securityCheck(LetterProcess letterProcess){

      Log.e(TAG,"检查信...");
}
然后我们在这个公司寄信的时候检查一下:

LetterProcess letterProcess = new LetterProcessImpl();
SecurityCheck securityCheck = new SecurityCheck();

public sendLetter(String address,String content){
        //帮你写信内容
	letterProcess.writeContent("朋友,好久不见,你还好吗");
        //填写地址
	letterProcess.writeEnvelope("北京市朝阳区,朝阳群众收");
        // 装进信封
	letterProcess.putContentIntoEnvelope();
        寄信
   
        //安检信
        securityCheck.securityCheck(letterProcess);
        //寄信
	letterProcess.sendLetter(); 

}
可以看到,其他地方没有修改,只是在寄信中增加了一个检查方法调用,没有给原来的代码造成大的改动。这样也满足了需求。

这个门面模式是对我们做事的一个很好的分装的过程,我们有很多的处理步骤的时候就可以添加一个门面,对过程进行分装,简化调用流程。其实学完了,仔细想一下,之前在什么地方好像就这么用过,把很多动作按照一定的顺序封装起来,方便我们调用。这也说明了,有些东西的确是通用的模式,尽管我们没有学,自己可能已经用到了。







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值