生活中,有这样一类问题。一个系统会向外部提供一些服务,但在某些系统,例如银行系统等,出于自我保护,并不向外界显示具体操作过程。而所提供的这些服务,很可能是系统内部各种操作的组合并执行的结果。如果将这种行事方式用于面向对象编程,势必会更符合面向对象的基本原则,达到高内聚,低耦合。
外观模式的应用场景:在真实的应用系统中,一个子系统可能由很多类组成。子系统的客户为了它们的需要,需要和子系统中的一些类进行交互。客户和子系统的类进行直接的交互会导致客户端对象和子系统之间高度耦合。任何的类似于对子系统中类的接口的修改,会对依赖于它的所有的客户类造成影响。
外观模式(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
分享到:
相关推荐
设计模式专题之(十一)外观模式---设计模式外观模式示例代码(python--c++)
设计模式外观模式PPT学习教案.pptx
iOS 设计模式 外观模式
C#设计模式-外观模式
文章:http://blog.csdn.net/hailushijie/article/details/8744778
大话设计模式之外观模式 经典代码 C#类
java的23种常用设计模式之外观模式,经典的例子解析。
设计模式--外观模式java例子
设计模式—外观模式
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
外观模式 Facade 设计模式 还请各位大S指教。
java常用设计模式-外观模式
设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者...
设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)
该资源是学习完设计模式的适配器模式与外观模式根据书中内容所写的demo
描述:电脑整机是CPU,内存,硬盘的外观。 启动电脑(按一下电源):启动CPU,启动内存,启动硬盘 关闭电脑(按一下电源):关闭硬盘,关闭内存,关闭CPU
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...