外观模式:定义了一个高层接口,这个接口使得子系统更加容易使用;另一种说法:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
一、子系统类
package com.zcbl.client.zcblsdk.facademodel;
/**
* Created by serenitynanian on 2018/6/5.
* 子系统
*/
public class SubSystemOne {
public void methodOne(){
System.out.println("子系统方法一");
}
}
/**
* Created by serenitynanian on 2018/6/5.
* 子系统
*/
public class SubSystemTwo {
public void methodTwo(){
System.out.println("子系统方法二");
}
}
/**
* Created by serenitynanian on 2018/6/5.
* 子系统
*/
public class SubSystemThree {
public void methodThree(){
System.out.println("子系统方法三");
}
}
二、外观类:它需要了解所有子系统的方法或属性,进行组合,以备外界调用
/**
* Created by serenitynanian on 2018/6/5.
* 外观模式
* 外观类:它需要了解所有子系统的方法或属性,进行组合,以备外界调用
*/
public class Facade {
SubSystemOne subSystemOne ;
SubSystemTwo subSystemTwo ;
SubSystemThree subSystemThree ;
public Facade() {
this.subSystemOne = new SubSystemOne();
this.subSystemTwo = new SubSystemTwo();
this.subSystemThree = new SubSystemThree();
}
public void methodOne(){
System.out.println("--------执行方法组One------");
subSystemOne.methodOne();
subSystemTwo.methodTwo();
}
public void methodTwo(){
System.out.println("--------执行方法组Two------");
subSystemOne.methodOne();
subSystemThree.methodThree();
}
public void methodThree(){
System.out.println("--------执行方法组Three------");
subSystemTwo.methodTwo();
subSystemThree.methodThree();
}
}
三、客户端调用
/**
* Created by serenitynanian on 2018/6/5.
* 由于Facade的作用,客户端可以根本不知道三个子系统类的存在的;
*
* 备注:外观模式完美的体现了依赖倒转原则(面向接口编程)和迪米特法则(最少知识原则)的思想
*/
public class Test {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodOne();
facade.methodTwo();
facade.methodThree();
}
}
四、总结
- 1.在设计初期阶段,应该有意识的将不同层进行分离:数据访问层与业务逻辑层,业务逻辑层与View层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合降低;
- 2.在维护一个遗留的复杂的系统时,这个系统已经难以扩展与维护了,但是它又非常重要,新的需求必须依赖与它,此时可以为新系统开发出一个Facade类,来给遗留的架构提供简单的接口,让新系统与Facade对象交互,Facade与遗留的架构进行复杂的交互;
- 3.外观模式完美的体现了依赖倒转原则(面向接口编程)和迪米特法则(最少知识原则);