外观模式

✍ dations ◷ 2025-02-23 19:53:11 #软件设计模式

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


相关

  • 长度单位长度是一维空间的度量,是国际单位制的七种基础度量之一。在几何体中长度通常指最长的一维。通常在量度二维空间中量度直线边长时,称呼长度数值较大的为长,不比其值大或者在“侧
  • 瑞士法郎瑞士法郎,简称瑞郎(ISO代码:CHF,数字代码:756,英语:Swiss franc,德语:Schweizer Franken)。是瑞士和列支敦士登的法定货币,由瑞士国家银行发行。由于瑞士稳定的政治环境及财政政策,瑞郎
  • 父爱母爱和父爱是母亲、父亲对子女的关心和爱护,例如把儿子和女儿由婴儿期、儿童、青少年,直至成年,供书教学,关怀照顾等。母爱是这个世界上最温柔的力量,它为你保驾护航。母爱常被描
  • 萨维德拉·拉马斯卡洛斯·萨维德拉·拉马斯(西班牙语:Carlos Saavedra Lamas ,1878年11月1日-1959年5月5日)是阿根廷的学者和政治家,他在1936年获得诺贝尔和平奖,为史上首位拉丁美洲的诺贝尔和平奖
  • 埃尔斯沃思坐标:44°34′20″N 68°28′34″W / 44.57222°N 68.47611°W / 44.57222; -68.47611埃尔斯沃思(英语:Ellsworth)是美国缅因州汉考克县的一个城市,也是该县县治。面积243.0平方
  • 尼皮辛湖坐标:46°17′N 80°00′W / 46.283°N 80.000°W / 46.283; -80.000尼皮辛湖是加拿大的湖泊,由安大略省负责管辖,长65公里、宽25公里,面积873平方公里,集水区面积12,173平方公里
  • 郭显德郭显德 (Hunter Corbett,1835年12月8日-1920年1月7日),出生于美国宾夕法尼亚州,美北长老会传教士。在中国山东度过了56年,步行千里,下乡布道与苦力贫民同眠共食,又广行善事。一生施
  • 尹派越剧流派是对越剧演员艺术特色,特别是塑造越剧人物方面等方面所做的归纳,包含剧目、唱、念、做等多方面,其中以唱腔最为重要。越剧公认的艺术流派有尹、徐、毕、范、陆、袁、王
  • 2005年12月逝世人物列表2005年逝世人物列表:1月 - 2月 - 3月 - 4月 - 5月 - 6月 - 7月 - 8月 - 9月 - 10月 - 11月 - 12月下面是2005年12月逝世的知名人士列表:
  • 搬运作用搬运作用是地质学外动力地质作用的一种,指固体颗粒在重力或外力的作用下发生的运动。搬运作用主要是以水为媒介,将泥沙、碎屑或岩砾,从上游一路往河流的中、下游输送。如果河床