`
longrui
  • 浏览: 10123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

结构型模式 - Facade(外观)模式

阅读更多

定义:

为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。


定义角色:

  • SubSystem:可以有一个或多个子系统,每个子系统的功能都相对独立;子系统并不知道Facade的存在,相对子系统而言Facade仅仅是另一个客户端
  • Facade:提供统一接口供客户调用,该角色知道子系统的相关功能

Outlook功能:

每个人都可能有很多邮箱,MSN的、网易的、公司的、google的。如果每天都登录各个邮箱收信非常麻烦,而且也可能漏收邮件。所以使用诸如Outlook这样的客户端工具就会方便很多。

子系统:

public class NetEaseMail {
	public void login163Mail() {
		System.out.println("登录网易邮箱...");
	}
	
	public void getUnreadMail() {
		System.out.println("已下载网易邮箱的未读邮件...");
	}
}
 
public class SinaMail {
	public void loginSinaMail() {
		System.out.println("登录新浪邮箱...");
	}
	
	public void getUnreadMail() {
		System.out.println("已下载新浪邮箱的未读邮件...");
	}
}

 外观类:

public class Outlook {

	private NetEaseMail netEaseMail;
	private SinaMail sinaMail;
	
	public Outlook() {
		netEaseMail = new NetEaseMail();
		sinaMail = new SinaMail();
	}
	
	public void receiveMails() {
		netEaseMail.login163Mail();
		netEaseMail.getUnreadMail();
		sinaMail.loginSinaMail();
		sinaMail.getUnreadMail();
	}
}

 最后只需要Outlook就能简单的收取全部邮箱的信:

public class You {	
        public static void main(String args[]) {
		new Outlook().receiveMails();
	}
}

输出结果:

登录网易邮箱...
已下载网易邮箱的未读邮件...
登录新浪邮箱...
已下载新浪邮箱的未读邮件...

 

如果哪天我又注册了一个GMail的邮箱,只需要修改Outlook类就可以。所以,外观模式实际上是个理顺系统间关系,降低系统间耦合度的方法。

 

分享到:
评论
1 楼 summernight 2009-04-03  
楼主真是讲的简单易懂。谢谢

相关推荐

    c++设计模式-结构型模式-外观模式

    c++设计模式-结构型模式-外观模式;qt工程;c++简单源码; 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,...

    外观模式(Facade Pattern)-结构型模式

    设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx

    C#面向对象设计模式纵横谈\11 结构型模式Facade外观模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第11节:结构型模式Facade外观模式

    Facade 外观模式(结构型模式)

    C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈\10.Facade 外观模式(结构型模式).wmv )

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)

    本篇文章将深入探讨C#面向对象设计模式中的Facade外观模式,这是一种结构型模式,旨在通过提供一个统一的接口来简化复杂的子系统。文章通过具体的例子和代码展示了如何在实际开发中运用这一模式,并解释了它与其他几...

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)

    **外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...

    设计模式--外观模式java例子

    **外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在Java编程中,外观模式的应用广泛,尤其是在处理...

    设计模式之外观模式(Facade Pattern)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...

    c++-设计模式之外观模式(Facade Pattern)

    外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...

    设计模式 - 外观模式(C++实例)

    **外观模式(Facade)**是一种结构型设计模式,它的主要目的是为了解耦复杂的系统,提供一个简单的接口,使得客户端可以更方便地使用系统的子系统。在C++编程中,外观模式的应用尤为常见,因为它能够有效地降低系统...

    设计模式专题之(十一)外观模式---设计模式外观模式示例代码(python--c++)

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。外观模式使子系统更容易被使用,因为它为复杂的子系统提供了一个简单的接口,客户端可以通过这个接口与子...

    java常用设计模式-外观模式

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统中的子系统,从而隐藏了子系统的复杂性。外观模式属于对象型模式,它通过创建一个外观类,将客户端与子系统解耦,使得客户端...

    设计模式之外观模式 facade

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...

    facade-demo(外观模式示例)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端代码能够更容易地使用这些系统或子系统。在Java编程中,外观模式常常被用来简化多模块间的交互,降低...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    外观模式是一种结构型设计模式,它的主要目标是提供一个统一的接口,用来简化对复杂系统的访问。在Java中,当你有一个复杂的子系统,而你希望客户端代码能够以一种更简洁、更易于理解的方式来与之交互时,就可以使用...

    [结构型模式] 外观模式的理解

    外观(Facade)模式是一种设计模式,属于结构型模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这种模式定义了一个高层接口,使得这一子系统更加容易使用。外观模式的主要目的是减少系统内部组件之间的...

    设计模式-外观模式(讲解及其实现代码)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以通过这个接口来访问系统,而无需了解系统内部的具体实现细节。外观模式降低了系统的复杂度,提高了...

    PHP设计模式(九)外观模式Facade实例详解【结构型】

    外观模式是一种结构型设计模式,其主要目的是为了解决复杂的系统划分成多个子系统后,如何降低子系统间的耦合度,提高系统的可维护性和可扩展性。它通过提供一个统一的接口,使得外部客户端可以直接与这个接口交互,...

    通过python实现外观模式(Facade Pattern).rar

    外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的接口,使得子系统更容易使用。外观模式定义了一个高层接口,使得这一子系统更加容易使用。 压缩包文件代码是一个简单的 ...

Global site tag (gtag.js) - Google Analytics