设计模式学习笔记(二):门面模式【Facade】(一) 问题的提出

来源:互联网 发布:局域网域名服务器搭建 编辑:程序博客网 时间:2024/06/12 22:20

学习自博客园的文章,作者 cbf4Life cbf4life@126.com。http://www.cnblogs.com/cbf4life/tag/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/      

     随着系统的不断改进和开发,它们会变得越来越复杂,系统会生成大量的类,这使得程序流程更难被理解。门面模式可为这些类提供一个简化的接口,从而简化访问这些类的复杂性。门面模式(Facade)也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。

       好,我们继续讲课。大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必要信息高速我,我给你发,我来做这四个过程,你就不要管了,只要把信件交给我就成了。

      在这中环境下,最累的是写信的人,为了发送一封信出去要有四个步骤,而且这四个步骤还不能颠倒,你不可能没写信就把信放到信封吧,写信的人要知道这四个步骤,而且还要知道这四个步骤的顺序,恐怖吧,我们先看看这个过程如何表现出来的:

      先看写信的过程接口,定义了写信的四个步骤:

package com.facade;/** * 定义一个写信的过程 */public interface LetterProcess {//首先要写信的内容public void writeContext(String context);//其次写信封地址public void fillEnvelope(String address);//把信放到信封里public void letterIntoEnvolpe();//然后邮递public void sendLetter();}

      写信过程的具体实现:

package com.facade;/** * 具体的实现类 */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 letterIntoEnvolpe(){System.out.println("把信放到信封中...");}public void sendLetter(){System.out.println("邮递信件...");}}

然后就有人开始用这个过程写信了:

package com.facade;/** * 我要开始写信了 */public class Client {public static void main(String[] args){//创建一个处理信件的过程LetterProcess letterProcess = new LetterProcessImpl();letterProcess.writeContext("Hello,It's me.");letterProcess.fillEnvelope("Happy Road No.666");letterProcess.letterIntoEnvolpe();letterProcess.sendLetter();}}

     
    然后就有人开始用这个过程写信了:

package com.facade;/** * 具体的实现类 */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 letterIntoEnvolpe(){System.out.println("把信放到信封中...");}public void sendLetter(){System.out.println("邮递信件...");}}


    那这个过程与高内聚的要求相差甚远,你想,你要知道这四个步骤,而且还要知道这四个步骤的顺序,一旦出错,信就不可能邮寄出去,那我们如何来改进呢?

 

0 0
原创粉丝点击