外观模式

✍ dations ◷ 2024-12-23 18:28:20 #软件设计模式

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


相关

  • 专性厌氧专性厌氧菌(obligate anaerobes)是一类仅能进行无氧呼吸,且无法在正常大气(氧含量21%)等富氧环境下存活的微生物。这类生物对氧气的耐受力不同,部分专性厌氧菌可以在氧含量达8%的
  • 墨西哥城墨西哥城(西班牙语:Ciudad de México 西班牙语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","C
  • 罗马蜗牛罗马蜗牛(学名:Helix pomatia),又名罗曼蜗牛,是一种大型的陆生蜗牛。它们是可食用的蜗牛,故此经常被养殖,被煮食时会被称为“法国蜗牛”。罗马蜗牛是雌雄同体的,故此很少选择配偶的
  • 曾母暗沙曾母暗沙(英语:James Shoal,詹姆斯暗沙;马来语:Beting Serupai)亦称詹姆沙,是一座位于南海、终年不露出水面的海底暗沙,被视为南沙群岛的一部分,马来西亚、中华民国及中华人民共和国
  • 艾兹格·迪杰斯特拉艾兹赫尔·韦伯·戴克斯特拉(荷兰语:Edsger Wybe Dijkstra,荷兰语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida
  • 环卫工人垃圾收集员是受雇于政府组织或私人公司,到住宅、办公室、店铺等收集垃圾,让垃圾可以集中处理,送往循环再造、堆填或焚化的人。他们会把垃圾送上垃圾车,由垃圾车把垃圾运到指定地
  • 达玛稣一世教宗圣达玛稣一世(拉丁语:Sanctus Damasus PP. I;约305年-384年12月11日)原名Damasus,于366年10月1日-384年12月11日在位为教宗。任内致力打击异端亚流派。因当时圣座改用拉丁文进
  • 帕尔·拉扎尔帕尔·拉扎尔(匈牙利语:Pál Lázár;1988年3月11日-)是一位匈牙利足球运动员。在场上的位置是右后卫。他现在效力于匈牙利足球甲级联赛球队德布勒森足球俱乐部。他也代表匈牙利
  • 凯乐符号凯乐符号(Chi-Rho,希腊语:ΧΡ)是一个早期的基督宗教符号,至今依然由一些基督宗教分支所使用,例如天主教。该符号是由希腊文单字“ΧΡΙΣΤΟΣ”(也就是基督一词的希腊文写法)的
  • 约翰·克里斯蒂安·丹尼尔·冯·施雷贝尔约翰·克里斯蒂安·丹尼尔·冯·施雷贝尔(德语:Johann Christian Daniel von Schreber,1739年-1810年),生于魏森塞,1810年死于埃朗根,德国博物学家。