设计模式:外观模式(门面模式)

  外观模式也叫门面模式, 它为子系统提供统一入口,封装系统复杂性。如同医院看病,病人需要与挂号,门诊,划价,化验,收费,取药等部门打交道

如同一个子系统客户端和另一个子系统各个类打交道一样,相互耦合处理复杂,如果引入门面模式,在医院增加一个接待员,由接待员复制与上面各个

部门打交道,那么对于病人这个客户端来说就容易很多。

门面模式主要就两个角色。

门面角色:客户端调用该角色方法。该角色包好各子系统的功能。

子系统角色:完成子系統各功能

 

例子:模拟注册公司流程

  1:未使用门面模式时,流程图如下

 

  2.使用了门面模式后(增加门面对象)

 interface GongShang {
     boolean checkName();
}

/**
 * 模擬工商局
 */
public class BeijinGongShang implements GongShang{
    @Override
    public boolean checkName() {
        System.out.println("北京工商局检查");
        return false;
    }
}

  

interface ShuiWu {
    boolean checkCertificate();
}

/**
 * 模拟税务局
 */
public class BeijinShuiWu implements ShuiWu {
    @Override
    public boolean checkCertificate() {
        System.out.println("北京稅務局");
        return false;
    }
}

  

interface Zhijian{
    boolean checkType();
}

public class BeijinZhijian implements Zhijian{
    @Override
    public boolean checkType() {
        System.out.println("北京質監局");
        return false;
    }
}

  

/**
 * 办理注册公司流程的门面对象
 *
 */
public class RegisterFacade {

	public void register(){
		GongShang  a = new BeijinGongShang();
		a.checkName();
		Zhijian b = new BeijinZhijian();
		b.checkType();
		ShuiWu  c  = new BeijinShuiWu();
		c.checkCertificate();
	}


}

  

public class Client {
    public static void main(String[] args) {
        //使用门面模式只需要调用门面角色的方法
        new RegisterFacade().register();
    }
}

  从上面的实例来看,有了这个門面类,也就是RegeisterFacader类,用户就不用亲自去调用子系统中类了,不需要知道系统内部的实现细节,甚至都不用知道系统内部的构成。

客户端只需要跟门面类交互就可以了。

 

posted @ 2019-01-08 21:17  小阿Q的博客  阅读(331)  评论(0编辑  收藏  举报