您的位置:首页 > 其它

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

2016-04-24 13:30 274 查看
1. 什么是外观模式

Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade

2. 外观模式的结构



3. 外观模式的角色和职责

Facade: 为调用方定义简单的调用接口。

Clients: 调用者。通过Facade接口调用提供某功能的内部类群。

Packages: 功能提供者。指提供功能的类群(模块或子系统)。

其实这种设计模式很简单,相信你在写代码的过程中不知不觉就用了。

下面我们写一个简单的例子。这例子中有三个子系统,SystemA,SystemB和SystemC,关键看我们我们在客户端(主类)中是如何调用的。

先声明三个子系统:

//SystemA.java
/**
* 子系统A
*/
public class SystemA {

public void realise(){
System.out.println("实现子系统A的功能");
}
}


//SystemB.java
/**
* 子系统B
*/
public class SystemB {

public void realise(){
System.out.println("实现子系统B的功能");
}
}


//SystemC.java
/**
* 子系统C
*/
public class SystemC {

public void realise(){
System.out.println("实现子系统C的功能");
}
}


在客户端(主类)中我们可以这样调用三个系统的功能:

//MainClass.java
public class MainClass {

public static void main(String[] args) {

SystemA systemA = new SystemA();
SystemB systemB = new SystemB();
SystemC systemC = new SystemC();

systemA.realise();
systemB.realise();
systemC.realise();

}
}


但是,你一看就很啰嗦。是不是?不仅啰嗦,扩展性还不好,是不是?而且,主类中的写这门多代码,一点都不清爽,是不是?一般客户端就仅有几行函数调用的代码,不说别的,最起码看起来舒服。

所以,我们可以在中间再写一个中间层,我们只要访问中间层,由中间层访问具体要实现的功能即可。

Facade.java
/**
* 中间层,负责访问底层的功能模块
*/
public class Facade {

private SystemA systemA;
private SystemB systemB;
private SystemC systemC;

public Facade(){
systemA = new SystemA();
systemB = new SystemB();
systemC = new SystemC();
}

public void realiseABC(){
systemA.realise();
systemB.realise();
systemC.realise();
}

public void realiseAB(){
systemA.realise();
systemB.realise();
}
}


这下,客户端就清爽多了。

//MainClass.java
public class MainClass {

public static void main(String[] args) {

Facade facade  = new Facade();
facade .realiseABC();
System.out.println("======================");
facade .realiseAB();
}
}


打印结果:

实现子系统A的功能
实现子系统B的功能
实现子系统C的功能
======================
实现子系统A的功能
实现子系统B的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息