外观模式

✍ dations ◷ 2025-11-12 06:45:23 #软件设计模式

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


相关

  • 全民健康保险全民健康保险,一般简称为“全民健保”或“健保”,是一种强制性保险的福利政策,法源是依据《中华民国宪法增修条文》所实施的全民医疗保险制度。为增进全体国民健康,中华民国于19
  • 悬浮粒子悬浮颗粒或称颗粒物(particulate matter (PM))、大气颗粒物(atmospheric particulate matter)、颗粒(particulates),泛指悬浮在空气中的固体颗粒或液滴,颗粒微小甚至肉眼难以辨识但
  • 新徒步主义新徒步主义(New Pedestrianism,简称NP),是一个基于步行计划理论进行理想化的新城市主义,由美国作家、艺术家、未来主义者、城市/室内/环境设计师麦克·E·亚瑟于1999年提出。新徒步
  • 苏伊士运河坐标:30°42′18″N 32°20′39″E / 30.70500°N 32.34417°E / 30.70500; 32.34417苏伊士运河(阿拉伯语:قناة السويس‎,转写:Qanā al-Suways,又译苏彝士运河)处于埃及
  • 中央军委主席中央军委主席一般指下列军队统帅:也可以指:其他类似的职务还有:
  • 贝尔格阿尔班·马里亚·约翰内斯·贝尔格(德语:Alban Maria Johannes Berg,1885年2月9日-1935年12月24日),奥地利作曲家,出生于奥地利维也纳,也逝于该地,是与勋伯格、韦伯恩齐名的第二维也
  • 国内生产总值韩国各地GDP列表大韩民国境内16个一级行政区的GDP(按购买力平价计算),所有数据来源于国际货币基金组织和大韩民国政府。
  • 英国皇家化学学会英国皇家化学学会(英语:Royal Society of Chemistry,简称RSC)是一所英国的学会(专业机构)、欧洲最大的化学科学组织:184、历史最为悠久的化学学会,目标为“推进化学科学”。1841年,
  • 兰迪·卡浦尔兰迪·卡浦尔(印地语:रणधीर कपूर,英语:Randhir Kapoor,1947年2月15日-)是一位印度宝莱坞演员、电影制作人和导演。他是印度演员、导演拉兹·卡普尔的长子,与兄弟在孟买的冠
  • AbioCorAbioCor是一款全人工心脏(Total Artificial Heart, TAH),由总部位于美国马萨诸塞州的AbioMed(英语:AbioMed)公司研发。这种人工心脏可以完全植入患者体内,优点包含原件小、使用生物