门面模式
门面模式:也叫作外观模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容易使用。
门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生,门面模式不参与子系统内的业务逻辑,其通用类图如下:
Facade门面角色:客户端通过调用该角色访问系统,此角色知道子系统的所有功能和责任。一般情况下,本角色会将所有客户端发来的请求委派到相应的子系统中去,也就是该角色没有实际的业务逻辑,只是一个委托类。
Subsystem子系统角色:可以同时 有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合,子系统并不知道门面的存在,如下是门面模式的通用代码:
public class SubClass1 {
public void doSomething(){
System.out.println("this is a method in SubClass1");
}}
public class SubClass2 {
public void doSomething(){
System.out.println("this is a method in SubClass2");
}}
public class SubClass3 {
public void doSomething(){
System.out.println("this is a method in SubClass3");
}}
public class Facade {
private SubClass1 class1 = new SubClass1();
private SubClass2 class2 = new SubClass2();
private SubClass3 class3 = new SubClass3();
public void doSomething(){
this.class1.doSomething();
this.class2.doSomething();
}
public void doAnotherthing(){
this.class3.doSomething();
this.class2.doSomething();
}}
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Facade facede = new Facade();
facede.doSomething();
facede.doAnotherthing();
}}
View Code
门面模式的优缺点
门面模式的优点
减少系统的相互依赖,所有的依赖都是对门面对象的依赖,与子系统无关。
提高了灵活性,不管子系统内如何变化,只要不影响到门面对象就无需对上层代码进行调整。
提高安全性,想让客户端访问系统的哪些业务就开通哪些逻辑,客户端无法访问不在门面模式中开通的方法。
门面模式的缺点
门面模式最大的缺点就是不符合开闭原则,对修改关闭,对扩展开放。如果出现增加或者删除功能,只能修改门面,而不能通过继承或者覆写的方式修正。

Comments | NOTHING