12外观模式Facade

时间:2021-01-20 03:46:54

一、什么是外观模式

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

二、外观模式的结构

12外观模式Facade

三、外观模式的角色和职责

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

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

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

A子系统

 /*
* A子系统
*/
public class SystemA {
/*
* A子系统实现功能
*/
public void doSomething() {
System.out.println("实现A子系统功能");
}
}

B子系统

 /*
* B子系统
*/
public class SystemB { /*
* B子系统实现功能
*/
public void doSomething() {
System.out.println("实现B子系统功能");
}
}

C子系统

 /*
* 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 doABC() {
this.systemA.doSomething();
this.systemB.doSomething();
this.systemC.doSomething();
} public void doAB() {
this.systemA.doSomething();
this.systemB.doSomething();
}
}

测试

 public class MainClass {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doABC();
}
}
 public class MainClass2 {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doAB();
}
}

====================================================================

国载

 //国载
public class GuoZai { public void mai() {
System.out.println("买国债");
}
}

股票

 //股票
public class Gupiao { public void mai() {
System.out.println("买股票");
}
}

期货

 //期货
public class Qihuo { public void chao() {
System.out.println("买期货");
}
}

基金

 //基金
public class JiJin {
private Gupiao gupiao;
private GuoZai guozai;
private Qihuo qihuo; public JiJin() {
this.guozai = new GuoZai();
this.gupiao = new Gupiao();
this.qihuo = new Qihuo();
} public void maiJijinA() {
this.guozai.mai();
this.gupiao.mai();
} public void maiJijinB() {
this.guozai.mai();
this.gupiao.mai();
this.qihuo.chao();
}
}

测试

 public class MainClass {
public static void main(String[] args) {
// //80年代,基金出现之前
// Gupiao gupiao = new Gupiao();
// gupiao.mai();
//
// Qihuo qihuo = new Qihuo();
// qihuo.chao();
//
// GuoZai guozhai = new GuoZai();
// guozhai.mai();
//有了基金之后
// JiJin jijin = new JiJin();
// jijin.maiJijinA();
JiJin jijin = new JiJin();
jijin.maiJijinB();
}
}

相关文章