一、什么是外观模式
Facade模式也叫外观模式,是由GoF提出的 23种设计模式中的一种。Facade模式为一组具 有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。
二、外观模式的结构
三、外观模式的角色和职责
Facade 为调用方定义简单的调用接口。
Clients 调用者。通过Facade接口调用提供某功能的内部类群。
Packages 功能提供者。指提供功能的类群(模块或子系统)。
A子系统
1 /* 2 * A子系统 3 */ 4 public class SystemA { 5 /* 6 * A子系统实现功能 7 */ 8 public void doSomething() { 9 System.out.println("实现A子系统功能"); 10 } 11 }
B子系统
1 /* 2 * B子系统 3 */ 4 public class SystemB { 5 6 /* 7 * B子系统实现功能 8 */ 9 public void doSomething() { 10 System.out.println("实现B子系统功能"); 11 } 12 }
C子系统
1 /* 2 * C子系统 3 */ 4 public class SystemC { 5 6 /* 7 * C子系统实现功能 8 */ 9 public void doSomething() { 10 System.out.println("实现C子系统功能"); 11 } 12 }
外观
1 //外观 2 public class Facade { 3 private SystemA systemA; 4 private SystemB systemB; 5 private SystemC systemC; 6 7 public Facade() { 8 systemA = new SystemA(); 9 systemB = new SystemB(); 10 systemC = new SystemC(); 11 } 12 13 public void doABC() { 14 this.systemA.doSomething(); 15 this.systemB.doSomething(); 16 this.systemC.doSomething(); 17 } 18 19 public void doAB() { 20 this.systemA.doSomething(); 21 this.systemB.doSomething(); 22 } 23 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Facade facade = new Facade(); 4 facade.doABC(); 5 } 6 }
1 public class MainClass2 { 2 public static void main(String[] args) { 3 Facade facade = new Facade(); 4 facade.doAB(); 5 } 6 }
====================================================================
国载
1 //国载 2 public class GuoZai { 3 4 public void mai() { 5 System.out.println("买国债"); 6 } 7 }
股票
1 //股票 2 public class Gupiao { 3 4 public void mai() { 5 System.out.println("买股票"); 6 } 7 }
期货
1 //期货 2 public class Qihuo { 3 4 public void chao() { 5 System.out.println("买期货"); 6 } 7 }
基金
1 //基金 2 public class JiJin { 3 private Gupiao gupiao; 4 private GuoZai guozai; 5 private Qihuo qihuo; 6 7 public JiJin() { 8 this.guozai = new GuoZai(); 9 this.gupiao = new Gupiao(); 10 this.qihuo = new Qihuo(); 11 } 12 13 public void maiJijinA() { 14 this.guozai.mai(); 15 this.gupiao.mai(); 16 } 17 18 public void maiJijinB() { 19 this.guozai.mai(); 20 this.gupiao.mai(); 21 this.qihuo.chao(); 22 } 23 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 // //80年代,基金出现之前 4 // Gupiao gupiao = new Gupiao(); 5 // gupiao.mai(); 6 // 7 // Qihuo qihuo = new Qihuo(); 8 // qihuo.chao(); 9 // 10 // GuoZai guozhai = new GuoZai(); 11 // guozhai.mai(); 12 //有了基金之后 13 // JiJin jijin = new JiJin(); 14 // jijin.maiJijinA(); 15 JiJin jijin = new JiJin(); 16 jijin.maiJijinB(); 17 } 18 }