外观模式

✍ dations ◷ 2024-09-20 06:07:04 #软件设计模式

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


相关

  • 王 颖王颖(1935年2月24日-),生于河南潢川,籍贯辽宁康平,中国海岸海洋地貌与沉积学家,南京大学教授、南京大学地学院院长。1935年出生于河南潢川。籍贯辽宁康平。1956年毕业于南京大学。1
  • 望安望安乡是台湾澎湖县的一个乡,也是澎湖县面积最大的离岛位于澎湖本岛南方海上,由19个岛屿所组成,其中6个为有人岛。旧称网垵。历年所属行政区列表望安乡公所是澎湖县望安乡最高
  • 关渡关渡(巴赛语:Kantaw;台湾话:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,Arial,sans-se
  • 格林伍德出版集团格林伍德出版集团(ABC-CLIO/Greenwood,Greenwood Publishing Group,简称GPG)是ABC-CLIO(英语:ABC-CLIO)旗下的学术与教育(中学至大学)出版商。前身是1967年的成立Greenwood Press(格林
  • 美国红杉加州红木(学名:Sequoia sempervirens),又称海岸红杉、红杉、北美红杉、美国红杉、长叶世界爷、咖斗,是世界上最高的针叶树(位于第二高花旗松的变种海滨黄杉以及第三高的北美云杉之
  • 全息拍摄术全息术(英语:Holography),又称全息投影、全息3D,是一种记录被摄物体反射(或透射)光波中全部消息(振幅、相位)的照相技术,而物体反射或者透射的光线可以透过记录胶片完全重建,仿佛物体就
  • 应用化学研究所南开大学应用化学研究所(英语:Nankai Research Laboratory of Applied Chemistry,简称南开大学应化所),成立于1932年3月8日,由美国麻省理工学院博士张克忠任所长,张洪沅任研究部主
  • 高等经济商业学院ESSEC高等商学院(法语:École supérieure des sciences économiques et commerciales,英语:ESSEC Business School),意译为高等经济商业学院,简称ESSEC,是法国的一所商学院。ESSEC
  • 张涵予张涵予(1964年12月19日-),北京人,中国大陆演员,华谊兄弟旗下艺人,2007年主演冯小刚电影《集结号》而成名,之后主演多部卖座电影包括《风声》、《智取威虎山3D》、《湄公河行动》和《
  • 玉津玉津(越南语:Ngọc Tân,1948年-)是越南歌唱家,出生在河内,祖籍海防。以歌曲《Chiều trên bến cảng》和关于河内的歌曲《Hà Nôi và tôi》,《Người Hà Nội》,《Hà Nội n