• Java设计模式----外观模式(Facade)


    1. 外观模式的定义:

    外观模式,也叫作门面模式,是一种常见的封装模式,要求一个子系统外部与其内部的通信通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。

    外观模式注重“统一的”接口,外部只能通过这个接口来访问子系统,除了这个接口不允许单独访问子系统的行为发生。

    2.  外观模式的角色说明:

         --Facade门面角色

          此角色知晓子系统的所有功能和责任,一般情况下,本角色会把客户端发来的请求分配到各个子系统中去,这也说明此角色并没有实际的业务逻辑,只是一个委托类。

        --SubSystemClasses子系统角色

          可以同时有一个或多个子系统,一个子系统不是一个单独的类,而是一个类的集合。子系统不知道门面角色类的存在,对于子系统来说,门面角色类只是另一个客户端而已。

    3.  通用实例代码:

    子系统类:

    public class ClassA {
       
    	public void doSomethingA(){
    		System.out.println("do something a");
    	}
    }

    public class ClassB {
       
    	public void doSomethingB(){
    		System.out.println("do something b");
    	}
    }

    public class ClassC {
       
    	public void  doSomethingC(){
    		System.out.println("do something c");
    	}
    }

    门面角色类Facade:

    public class Facade {
       
    	 //被委托对象
    	private ClassA  ca;
    	private ClassB  cb;
    	private ClassC  cc;
    	
    	public Facade() {
    		this.ca=new ClassA();
    		this.cb=new ClassB();
    		this.cc=new ClassC();
    	}
    	
    	//提供给外部的访问方法
    	public void  doSomethingA(){
    		this.ca.doSomethingA();
    	}
    	
    	public void  doSomethingB(){
    		this.cb.doSomethingB();
    	}
    	
    	public void doSomrthingC(){
    		this.cc.doSomethingC();
    	}
    }
    客户端测试类:

    public class Test {
       
    	public static void main(String[] args) {
    		
    		Facade fd=new Facade();
    		
    		fd.doSomethingA();
    		fd.doSomethingB();
    		fd.doSomrthingC();
    	}
    }
    4.外观模式的优点:

        a、减少系统间的依赖,所有的以来都是对门面对象的依赖,与子系统无关

        b、提高了灵活性,不管子系统内部怎么变化,只要不影响门面对象,任你自由活动

        c、提高安全性,想访问子系统的那些业务就在门面类开通哪些逻辑,不在门面上开通的方法,访问不到。




  • 相关阅读:
    [BZOJ]1018 堵塞的交通(SHOI2008)
    [BZOJ]1069 最大土地面积(SCOI2007)
    HDU5739:Fantasia——题解
    洛谷6186:[NOI Online 提高组]冒泡排序——题解
    洛谷4631 & UOJ415 & LOJ2586:[APIO2018] Circle selection 选圆圈——题解
    洛谷2014:[CTSC1997]选课——题解
    洛谷2758:编辑距离——题解
    洛谷4148 & BZOJ4066:简单题——题解
    洛谷4357 & BZOJ4520:[CQOI2016]K远点对——题解
    洛谷4320:道路相遇——题解
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293767.html
Copyright © 2020-2023  润新知