外观模式

✍ dations ◷ 2025-08-07 22:28:53 #软件设计模式

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


相关

  • 致畸物质畸形学(英语:Teratology)是研究生理上发展缺陷的学科。人们常常认为它就是研究人类先天性障碍的,但是其实畸形学的覆盖面比这个广得多。除了先天发育之外,它也研究其他的生命阶段
  • 芋(学名:Colocasia esculenta)或芋艿,俗称“芋头”,为天南星科芋属植物,其球状地下茎(块茎)可食用亦可入药,在大洋洲诸岛是波利尼西亚人传统主要粮食;全年皆有产,花期在秋季。最早栽种
  • 托斯卡纳语托斯卡纳语(拉丁语:lingua toscana,意大利语:Dialetto toscano),又称为托斯卡纳方言,流行在意大利托斯卡纳地区,是意大利-达尔马提亚语的分支。由拉丁语演变至现在的形式,标准意大利
  • 潘际銮潘际銮(1927年12月24日-),男,江西省瑞昌人。焊接学家,中国科学院院士,清华大学机械工程系教授,南昌大学前校长、名誉校长。主要从事焊接电源、焊接温度场、弧焊过程控制、焊接跟踪、
  • 发起进攻波罗的海 – 黑海 – 北极 – (跳马 – PQ-17船团 – 仙境)1941年巴巴罗萨 – (比亚韦斯托克及明斯克 – 斯摩棱斯克 – 乌曼 – 列宁格勒 – 第一次基辅 – 塞瓦斯托波尔围
  • TX得克萨斯州(英语:State of Texas,/ˈtɛksəs/,当地 /ˈtɛksɪz/),简称得州或德州,是全美国土地面积和人口的第二大州(面积仅次于阿拉斯加州;人口次于加利福尼亚州)。得克萨斯州位于
  • 头状骨头状骨(capitate bone)是人类掌骨中最大的一块,为腕骨中央的骨头。较圆的一端位于手舟骨及月骨所组成的凹槽上。许多哺乳类动物身上也可以找到这块骨头,与爬虫类及两栖类身上的
  • 越行站越行站是设置在双线铁路上的一种车站。铁路术语中的越行即俗称的“超车”。列车被另一列较快的列车超越时被铁路迷俗称为“被踩”。当速度慢或等级低的列车行驶在速度快或等
  • 望云县望云县,中国古县名。辽朝时置,治所在今河北省赤城县北。金朝时省。元朝至元二年(1265年),并龙门县为镇,至元二十八年(1291年)改龙门镇为望云县,隶云州。明朝宣德六年(1431年),废为龙门卫
  • 奥古斯塔山奥古斯塔山是北美洲的山峰,位于美国阿拉斯加州和加拿大育空接壤的边境,距离该国最高峰洛根山约25公里,属于圣埃利亚斯山脉的一部分,海拔高度4,289米。