外观模式

✍ dations ◷ 2025-06-09 21:32:14 #软件设计模式

外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。

FacadeDesignPattern.png

这是一个抽象的示例。一个客户“you”通过外观接口“computer”获取计算机内部复杂的系统信息。

/* Complex parts */class CPU {	public void freeze() { ... }	public void jump(long position) { ... }	public void execute() { ... }}class Memory {	public void load(long position, byte data) {		...	}}class HardDrive {	public byte read(long lba, int size) {		...	}}/* Façade */class Computer {	public void startComputer() {		cpu.freeze();		memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));		cpu.jump(BOOT_ADDRESS);		cpu.execute();	}}/* Client */class You {	public static void main(String args) {		Computer facade = new Computer();		facade.startComputer();	}}

C#

// Facade pattern -- Structural example using System;namespace DoFactory.GangOfFour.Facade.Structural{  // Mainapp test application   class MainApp  {    public static void Main()    {      Facade facade = new Facade();      facade.MethodA();      facade.MethodB();      // Wait for user       Console.Read();    }  }  // "Subsystem ClassA"   class SubSystemOne  {    public void MethodOne()    {      Console.WriteLine(" SubSystemOne Method");    }  }  // Subsystem ClassB"   class SubSystemTwo  {    public void MethodTwo()    {      Console.WriteLine(" SubSystemTwo Method");    }  }  // Subsystem ClassC"   class SubSystemThree  {    public void MethodThree()    {      Console.WriteLine(" SubSystemThree Method");    }  }  // Subsystem ClassD"   class SubSystemFour  {    public void MethodFour()    {      Console.WriteLine(" SubSystemFour Method");    }  }  // "Facade"   class Facade  {    SubSystemOne one;    SubSystemTwo two;    SubSystemThree three;    SubSystemFour four;    public Facade()    {      one = new SubSystemOne();      two = new SubSystemTwo();      three = new SubSystemThree();      four = new SubSystemFour();    }    public void MethodA()    {      Console.WriteLine("\nMethodA() ---- ");      one.MethodOne();      two.MethodTwo();      four.MethodFour();    }    public void MethodB()    {      Console.WriteLine("\nMethodB() ---- ");      two.MethodTwo();      three.MethodThree();    }  }}

C++

class CPU {public:	void freeze() { ... }	void jump(long position) { ... }	void execute() { ... }}class Memory {public:	void load(long position, char* data) {		...	}}class HardDrive {public:	char* read(long lba, int size) {		...	}}/* Façade */class Computer {public:	void startComputer() {		cpu.freeze();		memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));		cpu.jump(BOOT_ADDRESS);		cpu.execute();	}}/* Client */class You {public:	void start(String args) {		Computer facade = new Computer();		facade.startComputer();	}}


相关

  • 人类的咽(pharynx),又称咽头,是颈部的一个部分,为一条连接口腔和鼻腔至食道和气管(食道和气管交界)的圆锥形通道,是消化道和呼吸道的交会处。咽头与喉头在解剖学上合称为咽喉。人类
  • 病毒界一个位于宿主细胞之外的独立、功能完全的病毒颗粒一些病毒拥有的包裹病毒体的脂肪泡一段DNA或RNA。如果把核苷酸比作字的话,那么基因就是由核苷酸写成的句子。基因会指导病毒
  • 联邦食品、药品和化妆品法案美国联邦食品、药品和化妆品法案(常缩写为FFDCA,FDCA,或FD&C)是美国国会在1938年通过的一系列法案的总称,赋予美国食品药品监督管理局(FDA)监督监管食品安全、药品、及化妆品的权力
  • 鹳科(学名:Ciconiidae)在鸟类全基因组测序分类系统中是鸟纲鹳形目(Ciconiiformes)的唯一一个科。在西方又俗称送子鸟,因为在当地童话中,鹳常会带来新生儿。鹳形目在2014年的鸟类分
  • 何仁学何仁学(1963年12月-),湖北郧县人,汉族,中国共产党党员。中华人民共和国政治人物、第十三届全国人民代表大会解放军和武警部队代表。2018年,何仁学被选为解放军和武警部队出席第十三
  • 菊花岛觉华岛,又称大海山,位于中国辽宁省兴城市东南10多公里的辽东湾中,为辽东湾第一大岛。觉华岛由主岛和三小岛(磨盘山岛、张山岛、阎山岛)组成,主岛12.5平方公里,全岛面积13.5平方公里
  • 斯洛伐克国家图书馆斯洛伐克国家图书馆(斯洛伐克语:Slovenská národná knižnica)是斯洛伐克的国家图书馆,收藏有超过490万件图书和文件。斯洛伐克国家图书馆的部分设施也是博物馆,收藏和展示有
  • 景星组景星组是位于中国云南兰坪、思茅、墨江一带的上侏罗世至下白垩世地层,1965年由云南区域地质测量大队命名。该地层以紫红色泥岩、泥质粉砂岩(上部),灰、灰白、浅黄色块状石英砂岩
  • 查尔斯·布尔芬奇查尔斯·布尔芬奇(Charles Bulfinch,1763年8月8日-1844年4月15日)是一位美国建筑师,被多方誉为第一个美国本土出生的专业建筑师。布尔芬奇主要在家乡波士顿和华盛顿特区工作,他一
  • 江藤淳江藤淳(1932年12月25日 – 1999年7月21日) 以研究夏目漱石闻名的日本文学评论家,真名是江头淳夫(えがしら あつお),因从前书籍上的笔误,一直流传江藤出生于昭和8年(1933年)。江