码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之外观模式

时间:2016-09-23 12:34:38      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

外观模式

  外观模式核心就是为系统提供一个统一的入口,封装子系统的复杂性,便于客户端使用。

外观模式结构图

技术分享

  Client:客户端

  Facade:外观类,提供统一的接口,根据不同的请求,调用不同的子系统处理;

  Subsystem:子系统类,处理不同的子系统模块业务;

举例说明

  如果我们要实现一个注册公司的模块。需要和工商局+银行+质监局+税务局打交道;

  技术分享

  但是我们可以通过代理注册公司(外观类)去帮我们处理一系列的流程:

  技术分享

  代码实现

  (1)子系统

/**
 * SubSystemA 工商局
 * @author yangkj*/
public class SubSystemA {
    public void regist(String message) {
        System.out.println("工商局注册:" + message);
    }
}
/**
 * SubSystemB 银行
 * @author yangkj*/
class SubSystemB {
    public void regist(String message) {
        System.out.println("银行注册:" + message);
    }
}
/**
 * SubSystemC 质检局
 * @author yangkj*/
class SubSystemC {
    public void regist(String message) {
        System.out.println("质检局注册:" + message);
    }
}
/**
 * SubSystemD 税务局
 * @author yangkj*/
class SubSystemD {
    public void regist(String message) {
        System.out.println("税务局注册:" + message);
    }
}

  (2)外观类

/**
 * Facade 外观类
 * @author yangkj*/
public class Facade {

    public void regist(String message){
        SubSystemA a = new SubSystemA();
        a.regist(message);
        SubSystemB b = new SubSystemB();
        b.regist(message);
        SubSystemC c = new SubSystemC();
        c.regist(message);
        SubSystemD d = new SubSystemD();
        d.regist(message);
    }
}

  (3)客户端

/**
 * Client 
 * @author yangkj*/
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.regist("alibaba");
    }
}

  (4)测试结果

  技术分享

使用场景

  • 为一个复杂的系统提供一个简单的接口;
  • 客户端和多个子系统之间存在很大的依赖性。使用外观模式,可以实现客户端和子系统之间的解耦,提高子系统的独立性和可抑制性;

外观模式优缺点

  • 优点
    • 外观模式使得客户端和子程序解耦,实现松耦合的关系
    • 简化系统的相互依赖性,增大子系统的可移植性;
  • 缺点
    • 如果增加系统可能需要修改外观类或子系统的代码,违反”开闭原则“;
    • 如果外观类对子程序做过多限制,减少了子系统的灵活性和可变性;

设计模式之外观模式

标签:

原文地址:http://www.cnblogs.com/parryyang/p/5899458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!