一、什么是外观模式
Facade模式也叫外观模式,是由GoF提出的 23种设计模式中的一种。Facade模式为一组具
有类似功能的类群,比如类库,子系统等等,提 供一个一致的简单的界面。这个一致的简单的界 面被称作facade。
二、外观模式的结构
三、外观模式的角色和职责
Facade 为调用方定义简单的调用接口。 Clients 调用者。通过Facade接口调用提供某功能的内部类群。
Packages 功能提供者。指提供功能的类群(模块或子系统)。
//示例1:
/*
* A子系统
*/
public class SystemA {
/*
* A子系统实现功能
*/
public void doSomething()
{
System.out.println("实现A子系统功能");
}
}
/*
* B子系统
*/
public class SystemB {
/*
* B子系统实现功能
*/
public void doSomething()
{
System.out.println("实现B子系统功能");
}
}
/*
* C子系统
*/
public class SystemC {
/*
* C子系统实现功能
*/
public void doSomething()
{
System.out.println("实现C子系统功能");
}
}
public class MainClass {
public static void main(String[] args) {
//实现A子系统功能
SystemA systemA = new SystemA();
systemA.doSomething();
SystemB systemB = new SystemB();
systemB.doSomething();
SystemC systemC = new SystemC();
systemC.doSomething();
}
}
//实现A子系统功能
//实现B子系统功能
//实现B子系统功能
//示例2:
/*
* A子系统
*/
public class SystemA {
/*
* A子系统实现功能
*/
public void doSomething()
{
System.out.println("实现A子系统功能");
}
}
/*
* B子系统
*/
public class SystemB {
/*
* B子系统实现功能
*/
public void doSomething()
{
System.out.println("实现B子系统功能");
}
}
/*
* C子系统
*/
public class SystemC {
/*
* C子系统实现功能
*/
public void doSomething()
{
System.out.println("实现C子系统功能");
}
}
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 doSomething()
{
systemA.doSomething();
systemB.doSomething();
systemC.doSomething();
}
}
public class MainClass {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doSomething();
}
}
//实现A子系统功能
//实现B子系统功能
//实现C子系统功能
//示例2:
public class GuPiao {
public void buy()
{
System.out.println("买股票");
}
}
public class QiHuo {
public void buy()
{
System.out.println("买期货");
}
}
public class GuoZhai {
public void buy()
{
System.out.println("买国债");
}
}
public class JiJin { //基金
private GuPiao guPiao;
private QiHuo qiHuo;
private GuoZhai guoZhai;
public JiJin()
{
guPiao = new GuPiao();
qiHuo = new QiHuo();
guoZhai = new GuoZhai();
}
public void buyJiJin()
{
guPiao.buy();
qiHuo.buy();
guoZhai.buy();
}
}
public class MainClass {
public static void main(String[] args) {
//80年代,基金出现之前
GuPiao guPiao = new GuPiao();
guPiao.buy();
QiHuo qiHuo = new QiHuo();
qiHuo.buy();
GuoZhai guoZhai = new GuoZhai();
guoZhai.buy();
JiJin jiJin = new JiJin();
jiJin.buyJiJin();
}
}
//买股票
//买期货
//买国债
//买股票
//买期货
//买国债