外观模式

✍ dations ◷ 2025-04-04 06:10:04 #软件设计模式

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


相关

  • 希伯登氏结节希伯登氏结节(英语:Heberden's nodes)是指远端指关节(英语:Interphalangeal articulations of hand)(最靠近手指和脚趾末端的关节,DIP)出现的硬的或骨性肿胀。 它是骨关节炎的体征,是
  • CRISPR/Cpf1CRISPR/Cpf1 是一种DNA编辑的技术,其原理与 CRISPR/Cas 系统类似。CRISPR/Cpf1 也借由细菌或古菌对噬菌体的获得性免疫机制来进行基因编辑。由于 Cpf1 蛋白是一种比 Cas9 蛋
  • 照相摄影(英语:photography)是指使用某种专门设备进行影像记录的过程。一般我们使用机械照相机或者数码照相机进行静态图片摄影,静态摄影也会被称为照相。而摄影机(摄像放像机)则可以
  • Tenebrionoidea见内文拟步总科(Tenebrionoidea)为鞘翅目下一个相当大的总科。
  • 惊悚惊悚是一种广泛的文学、电影、电视及电玩类型,内含有众多的子分类。惊悚是以侦探、神秘事件、错综复杂的心理变态或犯罪故事做题材,往往兼具了侦探推理的部分特色,而给观众产生
  • 安进安进(AMGen,原称Applied Molecular Genetics)是一家美国制药公司,总部位于加州千橡市。它成立于1980年,经过多次兼并之后,成为现在世界最大的制药公司之一。2019年8月,安进宣布计划
  • 姜堰站姜堰站,位于中华人民共和国江苏省泰州市姜堰区沈高镇单塘村,是宁启铁路上的火车站,于2005年7月1日启用营运,2016年5月15日开办动车客运业务,由上海铁路局管辖。
  • 快乐数快乐数有以下的特性:在给定的进位制下,该数字所有数字(英语:digits)的平方和,得到的新数再次求所有数字的平方和,如此重复进行,最终结果必为1。以十进制为例: 因此28和32是快乐数,而在
  • 库诺·费舍海德堡大学 库诺·费舍(Kuno Fischer,1824年7月23日-1907年7月5日),德国哲学家、哲学史家、评论家。费舍早年在莱比锡大学和哈雷大学攻读哲学,1850年在海德堡大学任无薪讲师(英语:Pr
  • 冯培元冯培元(1815年-1853年),字因伯,浙江仁和县(今属杭州市)人。咸丰初年官至湖北学政、光禄寺卿。太平军攻占武昌后,投井自尽。冯培元自幼丧父,由母何氏抚养成人。道光二十四年(1844年),冯培