您的位置:首页 > 其它

设计模式之外观模式(Facade)

2013-08-02 14:56 316 查看
    外观模式又称门面模式,   所谓外观,就是为子系统对外提供的一组接口提供一个统一的界面,使其他系统对该系统的访问都是通过这个统一界面来完成的。

我们来看一个小例子:

某系统有三个类A类、B类、C类,分别完成某项功能:

 

package com.dxy.design.pattern.builder.facade;

public class A {

public static void doSomething() {
System.out.println("A完成某事");
}
}

package com.dxy.design.pattern.builder.facade;

public class B {

public static void doSomething() {
System.out.println("B完成某事");
}
}

package com.dxy.design.pattern.builder.facade;

public class C {

public static void doSomething() {
System.out.println("C完成某事");
}
}


客户端需要分别调用A、B、C三类中的doSomething来完成特定功能,通常我们会这样来调用:

package com.dxy.design.pattern.builder.facade;

public class Client {
public static void main(String[] args) {
A.doSomething();
B.doSomething();
C.doSomething();
}
}


这样做虽然能达到要求,但每次必须的和A、B、C类打交道才能完成规定实现,这很麻烦,这时我们只需要引入facade类:

package com.dxy.design.pattern.builder.facade;

public class Facade {

public void aDoSomeThing() {
A.doSomething();
}

public void bDoSomeThing() {
B.doSomething();
}

public void cDoSomeThing() {
C.doSomething();
}
}


这样我们每次只用Facede类就能完成规定实现:

package com.dxy.design.pattern.builder.facade;

public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.aDoSomeThing();
facade.bDoSomeThing();
facade.cDoSomeThing();
}
}


使用facade模式避免了外部系统和子系统之间的直接联系,从而降低了系统之间的依赖和复杂度,但这样做会限制外部系统对仔细通过调用的灵活性,只能按照外传类提供的方式对子系统进行调用。

 

上述示例UML图如下:

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: