外观模式

✍ dations ◷ 2025-12-03 06:07:56 #软件设计模式

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


相关

  • (+)ssRNA核糖核酸病毒(英语:RNA virus),又称RNA病毒,其遗传物质为RNA,这些核糖核酸通常是单链RNA(ssRNA),但是也可能是双链RNA(dsRNA)。由RNA病毒感染造成的著名人类疾病包括艾滋病(AIDS)、埃博
  • 大恶臭大恶臭(英语:Great Stink或Big Stink)是指1858年夏天开始英国首都伦敦散发出一股恶臭,臭味源于大量未经处理的生活污水直接排入泰晤士河而挥发出来。这股恶臭被认为是同期间霍乱
  • 陈皮陈皮(广皮)即橘皮,由橘子成熟后的果皮晒干或烘干所得。陈皮放置年份越久越好,故称为“陈皮”。陈皮是重要中药材,亦可以用作烹饪佐料及制作零食。根据本草纲目记载,陈皮:疗呕哕反胃
  • 五星上将五星上将(英语:General of the Army/Five-Star General),相当于其他一些国家的元帅,也是美国第二高的军阶和目前可以获得的最高军衔。历史上只有9人拥有此军衔。该军衔仅在战时授
  • 北京物资学院北京物资学院(Beijing Wuzi University),简称 北物。学校位于中华人民共和国首都北京市通州区的财经类高等院校,隶属北京市教育委员会。学院以会计为特色,覆盖经济学、管理学等多
  • 第四届全国人大第一次会议中华人民共和国第四届全国人民代表大会任期由1975年至1978年,期间只召开过一次全体会议。中华人民共和国第四届全国人民代表大会第一次会议于1975年1月13日至17日在北京召开
  • 十里铺乡 (新蔡县)十里铺乡是中国河南省新蔡县下辖的一个乡。十里铺乡下辖:十里铺村、高庄村、七里朱村、闫湖村、十里赵村、黎庙村、前楼村、朱药铺村、马油坊村、城郊村、刘庄村、平铺村、黄
  • 造律台遗址古城酂城造律台遗址在河南省永城市酂(拼音:cuo)城镇(是一座古城,现在还有城墙遗址,永城市城西25公里处)是一椭圆形高台,形状好像龟背,它高约7米,它底部南北长54米,东西宽34米。酂城
  • 林芳仕林芳仕(1973年6月19日-),出生于台湾南投县竹山镇,为台湾镶嵌及窑烧玻璃艺术家。林芳仕于1991年毕业于国立竹山高中美工科,在1995年起开始从事艺术玻璃制作,妻子陈璐昂是画家,两人互
  • 总舖师总舖师,或总铺师 ,是台湾的餐饮业职称之一,指办桌服务(类似西方的外烩)中负责掌厨的厨师。闽南语中,称厨师为总铺、总舖、总傅、馔傅、总庖、掌庖,又称屠煮、屠子、刀煮、刀子。台