外观模式

✍ dations ◷ 2025-07-15 06:33:47 #软件设计模式

外观模式(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();	}}


相关

  • 古文陶文 ‧ 甲骨文 ‧ 金文 ‧ 古文 ‧ 石鼓文籀文 ‧ 鸟虫书 ‧ 篆书(大篆 ‧  小篆)隶书 ‧ 楷书 ‧ 行书 ‧ 草书漆书 ‧  书法 ‧ 飞白书笔画 ‧ 
  • 生物分子复合体生物分子复合体 ,也称为大分子复合体或生物大分子复合体,是指任何一种由多于一种蛋白质、RNA、DNA、 脂质或碳水化合物分子组成的生物复合物。 这些生物分子之间的相互作用是
  • 关系性量子力学关系性量子力学(英语:Relational quantum mechanics,RQM)是一种量子力学诠释,此理论认为量子系统的量子态是随观察者而变的;也就是说,量子态是观察者与系统之间的关系。此一诠释最
  • 鱼湖鱼湖国家森林(英语:Fishlake National Forest)是一座美国国家森林,位于犹他州中南部,得名于州内最大的山区淡水湖——鱼湖(英语:Fish Lake (Utah))。Quitchupah山谷鱼湖国家森林内的
  • armoured甲胄鱼(学名:Ostracoderms),又名介皮类,是已灭绝的一类没有下颚的原始鱼类,其身上有骨质的甲板覆盖。它们的化石在奥陶纪至泥盆纪地层都有发现。它们是栖于水底的动物。甲胄鱼是最
  • 吉马拉斯省吉马拉斯省(英语:Guimaras),是一个位于菲律宾的省份。首府为乔丹市。 该省在公元1992年以前是属于伊洛伊洛省的范围,后来就从该省(伊洛伊洛省)独立成一个省份。
  • TAS2R38· G蛋白耦合受体蛋白信号传递路径 · 响应刺激 TAS2R38是一种苦味味觉感受器,该感受器可以尝出苯硫脲和丙硫氧嘧啶或者相关物质的苦味。这一点和大多数苦味感受器有所不同
  • 刘器钧刘器钧,宁乡东湖塘人,一八八一年八月--九五八年十二月,民主革命家,教育家数学家,测量学家, 曾受吴大征巡抚聘请主讲于湖南省百善堂,一九零—年入湖北振武学堂,—九零贰年以宁乡县第
  • 胡培翚胡培翚(1782年-1849年),字载屏,号竹村,安徽绩溪人,清朝官员。胡秉钦之子。祖父胡匡衷,从父胡秉虔,皆以治《仪礼》闻名,于经义多所发明。培翚少承家学,师从凌廷堪,博通经术,尤精于《三礼》
  • 睡莲睡莲(学名:)又称子午莲、水芹花、瑞莲、水洋花或小莲花,是属于睡莲目睡莲科睡莲属的水生植物。多年生水生草本,外型与荷花相似,不同的是荷花的叶子和花挺出水面,而睡莲的叶子和花浮