门面模式

      门面模式的作用也是实现高内聚,低耦合的程序模式。在程序设计中,很多时候是需要走特定的流程顺序,这些可以作为模块分装起来,由一个“门面”来统一完成。比如:在饭店点餐的时候,找座位->倒茶->点餐->上菜->结账。这个过程通常会由服务员来导引用户完成,这个时候,服务员就是所谓的门面。用户作为参数或者门面的成员。这里的例子还是采用《Java编程模式》中,邮件的例子,其实很简单。直接上代码:

      将信件的处理流程定义为接口,这里将信件的发送,统一由邮局来负责,用户只需要提供邮件的内容和收件地址:

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();
}
View Code

      信件梳理流程的实现:

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("邮递信件...");
    }

}
View Code

      这个程序里,邮局就是所谓的门面:

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();
    }
}
View Code

      处理过程中,警察局要对收件地址为God Province的邮件检查:

package com.cbf4life.facade;

public class Police {

    
    public void checkLetter(String address){
        if(address.contains("God Province")){
            System.out.println("Check!");
        }
    }
}
View Code

      客户端实现:

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);
    }
}
View Code

      看了这几个程序的设计模式,难度上似乎也不大,但是多少对以前读过的别人的程序有点感觉了。以前不太了解为什么那样设计,现在慢慢有所眉目了^_^!

posted @ 2014-04-19 11:58  joy06  阅读(219)  评论(0编辑  收藏  举报