门面模式
门面模式的作用也是实现高内聚,低耦合的程序模式。在程序设计中,很多时候是需要走特定的流程顺序,这些可以作为模块分装起来,由一个“门面”来统一完成。比如:在饭店点餐的时候,找座位->倒茶->点餐->上菜->结账。这个过程通常会由服务员来导引用户完成,这个时候,服务员就是所谓的门面。用户作为参数或者门面的成员。这里的例子还是采用《Java编程模式》中,邮件的例子,其实很简单。直接上代码:
将信件的处理流程定义为接口,这里将信件的发送,统一由邮局来负责,用户只需要提供邮件的内容和收件地址:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.cbf4life.facade; /** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you * all. 定义一个写信的过程 */ public interface LetterProcess { // 首先要写信的内容 public void writeContext(String context); // 其次写信封 public void fillEnvelope(String address); // 把信放到信封里 public void letterInotoEnvelope(); // 然后邮递 public void sendLetter(); }
信件梳理流程的实现:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.cbf4life.facade; /** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you * all. 写信的具体实现了 */ public class LetterProcessImpl implements LetterProcess { // 写信 public void writeContext(String context) { System.out.println("填写信的内容...." + context); } // 在信封上填写必要的信息 public void fillEnvelope(String address) { System.out.println("填写收件人地址及姓名...." + address); } // 把信放到信封中,并封好 public void letterInotoEnvelope() { System.out.println("把信放到信封中...."); } // 塞到邮箱中,邮递 public void sendLetter() { System.out.println("邮递信件..."); } }
这个程序里,邮局就是所谓的门面:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.cbf4life.facade; /** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you * all. */ public class ModenPostOffice { private LetterProcess letterProcess = new LetterProcessImpl(); private Police letterPolice = new Police(); // 写信,封装,投递,一体化了 public void sendLetter(String context, String address) { // 帮你写信 letterProcess.writeContext(context); // 写好信封 letterProcess.fillEnvelope(address); // 警察要检查信件了 letterPolice.checkLetter(address); // 把信放到信封中 letterProcess.letterInotoEnvelope(); // 邮递信件 letterProcess.sendLetter(); } }
处理过程中,警察局要对收件地址为God Province的邮件检查:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.cbf4life.facade; public class Police { public void checkLetter(String address){ if(address.contains("God Province")){ System.out.println("Check!"); } } }
客户端实现:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.cbf4life.facade; /** * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you * all. 我开始给朋友写信了 */ public class Client { public static void main(String[] args) { // 现代化的邮局,有这项服务,邮局名称叫Hell Road ModenPostOffice hellRoadPostOffice = new ModenPostOffice(); // 你只要把信的内容和收信人地址给他,他会帮你完成一系列的工作; String address = "Happy Road No. 666,God Province,Heaven"; // 定义一个地址 String context = "Hello,It's me,do you know who I am? I'm your old lover. I'd like to...."; hellRoadPostOffice.sendLetter(context, address); } }
看了这几个程序的设计模式,难度上似乎也不大,但是多少对以前读过的别人的程序有点感觉了。以前不太了解为什么那样设计,现在慢慢有所眉目了^_^!