日期:2014-05-20  浏览次数:20656 次

门面模式在实际项目中的例子
大家好。最近学习了JAVA设计模式之门面模式的基本结构。但是还是不能运用到项目中去。请大家举几个典型门面模式在实际项目中的例子?

以下代码是门面模式的基本结构
(一)
package com.sun.facade.facadedemo02;
//挂号类
public class GuaHao {
public void start(){
System.out.println("交钱挂号。。。");
}
public void over(){
System.out.println("挂号完毕,去门诊。。。。");
}
}

(二)
package com.sun.facade.facadedemo02;
//化验类
public class HuaYan {

public void jiaoFei(){
System.out.println("划价交费。。。");
}
public void satrt(){
System.out.println("开始化验。。");
}
public void over(){
System.out.println("化验结束,去拿药。。。");
}
}

(三)
package com.sun.facade.facadedemo02;public class JieDai {
public final static GuaHao gh=new GuaHao();
public final static JiuZhen jz=new JiuZhen();
public final static HuaYan hy=new HuaYan();
public final static QuYao qy=new QuYao();

public void start(){
gh.start();
gh.over();

jz.start();
jz.huaYan();

hy.jiaoFei();
hy.satrt();
hy.over();

qy.jiaoFei();
qy.start();
qy.over();
}
}

(四)
package com.sun.facade.facadedemo02;
//就诊类
public class JiuZhen {
public void start(){
System.out.println("正在看病中。。。");
}

public void huaYan(){
System.out.println("去化验。。。");
}
}
(五)
package com.sun.facade.facadedemo02;
//取药类
public class QuYao {

public void jiaoFei(){
System.out.println("划价交费。。。");
}
public void start(){
System.out.println("等待取药中。。。。");
}
public void over(){
System.out.println("拿了药,走人。。。");
}
}
(六)
package com.sun.facade.facadedemo02;
//客户端(病人)看病非常方便。直接找接待。
public class Test {
public static void main(String[] args) {
JieDai jd=new JieDai();
jd.start();
}
}

------解决方案--------------------
设计模式最难的就是应用了,23种设计模式很多我感觉还很类似,所以一点要先清楚每种设计模式的概念的应用场景:

什么是(Facade)模式?
Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用(出自百度文库)。即当子系统复杂或者繁锁时,我们让子系统提供一个窗口,程序中称为接口,其它程序或者对象就通过这个窗口(接口)与此子系统联系。接口可以是类或方法等。这样就简化了子系统的使用。

 
作用是什么?
简化子系统的使用。


如何实现?
当子系统(或者对象)使用很复杂时,我们建立一个接口(窗口)对象,将子系统的复杂的使用方法写在此象中,其它对象或程序通过调用此接口(窗口)来使用系统。即在其它对象或程序中加了一层,此层用于调用子系统。而其它对象使用些层来调用子系统,而不管此层如何调用子系统。


举一个我自己的例子(视频会议系统):
代码就不贴出来了,比如我要start一个meeting,启动meeting是一个很复杂的过程,需要从去meetingType类中判断meeting的种类,支持哪些功能,高清啊?音频啊?VoIP?等等,这时我们设计一个meeting秘书的类,由这个秘书去安排具体的会议,我们只要直接start()就可以了。