`

【设计模式】外观模式

 
阅读更多

      生活中,有这样一类问题。一个系统会向外部提供一些服务,但在某些系统,例如银行系统等,出于自我保护,并不向外界显示具体操作过程。而所提供的这些服务,很可能是系统内部各种操作的组合并执行的结果。如果将这种行事方式用于面向对象编程,势必会更符合面向对象的基本原则,达到高内聚,低耦合。

 

外观模式的应用场景:在真实的应用系统中,一个子系统可能由很多类组成。子系统的客户为了它们的需要,需要和子系统中的一些类进行交互。客户和子系统的类进行直接的交互会导致客户端对象和子系统之间高度耦合。任何的类似于对子系统中类的接口的修改,会对依赖于它的所有的客户类造成影响。
外观模式(Facade pattern)为子系统提供了一个更高层次、更简单的接口,从而降低了子系统的复杂度和依赖。这使得子系统更易于使用和管理。——
http://dev.yesky.com/203/2175203.shtml

 

      以银行为例,我们使用ATM机,银行系统为我们提供查询、取款的服务。客户想要获得查询、取款等服务,必须调用银行系统内相关的方法,但银行为了系统安全,必须要使得它们对客户不可见,但相关服务依旧要提供。于是,就有了ATM这个设备,使得在内部不透明的情况下,服务依旧不受影响。客户就可以通过ATM获得相关服务,但不知道其具体操作。

       所谓外观模式就是这个道理。在不影响提供相关服务的情况下,将实现方法封装起来,通过FacadePattern里组合相关方法,向外提供服务。


 

如上图,就是银行ATM的实例的模型。

代码示例如下:

系统内,处理类,用于处理用户请求

package fP1;

public class Deal {
	// chang method
	public void change() {
		System.out.println("do some changs!");
	}

	// submit method
	public void submit() {
		System.out.println("has submitted!");
	}
}

 系统内,账户类,用于账户服务

package fP2;

public class Credit {
	// get the Credit method
	public void getCredit() {
		System.out.println("has got the Credit!");
	}

	// set the properties
	public void setCredit() {
		System.out.println("has set the Credit!");
	}
}

 FacadePattern,ATM类,系统内与外的接口,系统内各类方法的组合,以对外提供服务

package facadePattern;

import fP1.Deal;
import fP2.Credit;

public class ATM {
	private Credit credit = new Credit();
	private Deal deal = new Deal();

	// search method
	public void search() {
		System.out.println("custom want to search Credit!");
		credit.getCredit();
		deal.submit();
	}

	// save money method
	public void save() {
		System.out.println("custom want to save money!");
		deal.change();
		credit.setCredit();
		deal.submit();
	}
}

 系统外,用户类

package facadePattern;

public class Custom {
	// user's name
	private String name = "ailse";

	// get method
	public String getname() {
		return name;
	}
}

 测试及结果

package facadePattern;

public class Test {
	public static void main(String[] args) {
		Custom custom = new Custom();
		String name = custom.getname();
		System.out.println(name + " is doing somthing with the ATM");
		ATM atm = new ATM();
		System.out.println(name + " search the Credit!");
		atm.search();
		System.out.println(name + " save money!");
		atm.save();
	}
}

 

 由结果显而易见,内部方法随对外部对象不可见,但仍不影响外部服务的提供。面对改变内部业务流程改变时,只用改相应的内部方法,却不会影响外部。可以很好的隔离外界用户和内部系统。

  • 大小: 19.7 KB
  • 大小: 22.3 KB
分享到:
评论
1 楼 siyanglu 2012-03-13  
虽然看不懂,但好像好厉害的样子……

相关推荐

    设计模式外观模式PPT学习教案.pptx

    设计模式外观模式PPT学习教案 在软件设计中,外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的多个接口,从而简化了子系统的使用和维护。本节课程将详细介绍外观模式的...

    设计模式之外观模式案例代码

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以不关心内部的复杂性,只通过这个接口与子系统进行交互。这种模式降低了系统的复杂度,提高了代码的...

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

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

    iOS 设计模式 外观模式

    在iOS开发中,设计模式是一种解决常见编程问题的模板,它们是经验丰富的开发者们智慧的结晶,被广泛应用于创建可维护、可扩展的代码。外观(Facade)模式就是其中一种,它提供了一个统一的接口,使得子系统的一组...

    C#设计模式-外观模式

    **外观模式(Facade Pattern)**是软件工程中一种常用的设计模式,它为复杂的子系统提供了一个简单的接口,使得客户端代码可以更容易地与这些子系统交互。在C#中,外观模式同样被广泛应用,以降低系统的复杂性,提高...

    设计模式之外观模式

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解耦系统,提供一个统一的入口,使得客户端可以更容易地使用复杂的子系统。在Java中,外观模式通常用于简化对复杂系统的访问,它创建了...

    大话设计模式之外观模式

    大话设计模式之外观模式 经典代码 C#类

    设计模式_外观模式示例代码

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于与一个复杂的子系统进行交互。这个接口简化了子系统的使用,使得客户端无需了解子系统内部的复杂性。在本示例中,电脑整机可以看作是...

    24种设计模式以及混合设计模式

    其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...

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

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

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor

    设计模式之适配器模式与外观模式demo

    适配器模式和外观模式是两种非常重要的设计模式,它们在实际项目中有着广泛的应用。本资源提供了一个关于这两种模式的实战示例,帮助我们更好地理解和应用它们。 适配器模式(Adapter Pattern)的主要目的是将两个...

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

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

    设计模式—外观模式

    **外观模式(Facade Pattern)**是软件工程中一种常用的设计模式,属于结构型模式,它为复杂的系统或者子系统提供一个简洁的接口,使得客户端无需了解系统内部的复杂性,只需要通过这个统一的接口进行交互。外观模式...

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

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

    设计模式课件大全

    设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者...

    新版设计模式手册 - C#设计模式(第二版)

    包括适配器模式、桥接模式、装饰器模式、外观模式、组合模式、享元模式和代理模式。C#中的接口实现和委托机制为实现这些模式提供了便利。 3. 行为型模式:关注对象之间的职责分配和通信。比如命令模式、解释器模式...

    JAVA设计模式chm文档

    设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...

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

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

Global site tag (gtag.js) - Google Analytics