外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
优点:1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性4、客户端不与系统耦合,外观类与系统耦 合。 缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
又叫作最少知识原则,只与你的直接朋友交谈,不跟“陌生人”说话,其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 定义系统的入口。 在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。 如:去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
package com.liang.facade; public interface GuaHao { void guaHao(); } class GuaHaoImpl implements GuaHao{ @Override public void guaHao() { // TODO 自动生成的方法存根 System.out.println("挂号"); } } package com.liang.facade; public interface MenZen { void menZen(); } class MenZenImpl implements MenZen{ /* (非 Javadoc) * @see com.liang.facade.MenZen#menZen() */ @Override public void menZen() { // TODO 自动生成的方法存根 System.out.println("到门诊看病"); } } package com.liang.facade; public interface JiaoQian { void giveMOney(); } class JiaoQianImpl implements JiaoQian{ /* (非 Javadoc) * @see com.liang.facade.JiaoQian#giveMOney() */ @Override public void giveMOney() { // TODO 自动生成的方法存根 System.out.println("交钱"); } } package com.liang.facade; public interface QuYao { void getYao(); } class QuYaoImpl implements QuYao{ /* (非 Javadoc) * @see com.liang.facade.QuYao#getYao() */ @Override public void getYao() { // TODO 自动生成的方法存根 System.out.println("去取药"); } } package com.liang.facade; /** * 客户端可以访问系统的接口 * @author Administrator * */ public class FacadeDemo { public void provideService() { GuaHao gh=new GuaHaoImpl(); gh.guaHao(); MenZen mz=new MenZenImpl(); mz.menZen(); JiaoQian jq=new JiaoQianImpl(); jq.giveMOney(); QuYao qy=new QuYaoImpl(); qy.getYao(); } } package com.liang.facade; public class Client { public static void main(String[] args) { FacadeDemo f=new FacadeDemo(); f.provideService(); } }