我的Design Pattern之旅[5]:Facade Pattern(OO)

Intent

替子系统里的一堆介面定义一套统一的高阶介面,让子系统更易使用。

Introduction

Facade常用在两个地方,第一种用法是将原来程序导向的系统,利用Facade包成OO,如MFC包装Win32 API,第二种用法是将原来复杂的OO系统,再包成更简单的OO,如.NET Enterprise Library将.NET Framework再做一次包装,让你更容易使用.NET。另外3-tier也是典型Facade的应用,DAL(Data Access Layer)就是一个Facade,让BLL(Business Logic Layer)在存取资料时,不用对付ADO.NET复杂的机制,只需面对DAL即可。

Sample Code

如我们坐捷运买票,目前的卖票的机器只能吃铜板,所以得另外的提供换钞机,让旅客将纸币换成铜板,也就是说,若一个旅客身上只有纸币又要卖捷运票,他必须做两个步骤,先将纸币换成铜板,再用铜板去买车票。


1/**//*
2(C) OOMusou 2007 http://oomusou.cnblogs.com
3
4Filename  : DP_FacadePattern1_before.cpp
5Compiler  : Visual C++ 8.0 / BCB 6.0 / gcc 3.4.2 / ISO C++
6Description : Demo how to use Facade pattern (before)
7Release   : 04/24/2007 1.0
8*/
9#include <iostream>
10
11using namespace std;
12
13struct Bill {
14 int value;
15 Bill(int value) : value(value) {}
16};
17
18struct Coin {
19 int value;
20 Coin(int value) : value(value) {}
21};
22
23class BillToCoinMachine {
24public:
25 Coin getCoin(Bill bill) {
26  return Coin(10);
27 }
28};
29
30class CoinToTicketMachine {
31public:
32 void getTicket(Coin coin) {
33  cout << "Get ticket" << endl;
34 }
35};
36
37int main() {
38 BillToCoinMachine machine1;
39 Coin coin = machine1.getCoin(Bill(100));
40
41 CoinToTicketMachine machine2;
42 machine2.getTicket(coin);
43}

執行結果

Get ticket

时间: 2024-11-05 04:57:54

我的Design Pattern之旅[5]:Facade Pattern(OO)的相关文章

我的Design Pattern之旅[7]:使用泛型改進Adapter Pattern(OO)

Introduction 在(原创) 我的Design Pattern之旅[6] : Adapter Pattern (OO) (Design Pattern) (C/C++) (.NET) (C#) (C++/CLI) (VB) 中的Grapher范例,我们看到Class Adapter必须针对Triangle.Circle.Square量身订做TriangleDrawAdapter.CircleDrawAdapter.SquareDrawAdapter,虽然符合OCP,但每个class就得需

我的Design Pattern之旅[3]:使用template改進Strategy Pattern(OO)

在(原创) 我的Design Pattern之旅:Strategy Pattern (初级) (Design Pattern) (C++) (OO C++) (Template C++)中,我们使用了strategy pattern让Grapher能画Triangle.Circle和Square 因为需求再次改变,:D,我们希望Grapher能将文字印在各Shape中,执行结果如下 Draw Hello Shape!! in Square Draw Hello C++!! in Circle 为

我的Design Pattern之旅[4]:使用Generic改進Strategy Pattern(OO)

Abstract 在(原创) 我的Design Pattern之旅:使用template改进Strategy Pattern (OO) (Design Pattern) (C/C++) (template)中,使用了C++的template改进strategy pattern,本文使用C#的generic改进strategy pattern. Introduction C# 2.0加入了generic对泛型的支援,所以想将原来C++的template程式一行一行的改成C# generic. 在s

我的Design Pattern之旅[1]:Strategy Pattern (OO)

Abstract Head First Design Patterns是用strategy pattern当作第一个范例,而陈俊杉教授也是用strategy当作授课的第一个pattern,可见strategy的确适合初学者学第一个学习的pattern. Intent 定义一整族演算法,将每一个演算法封装起来,可互换使用,更可以在不影响外界的情况下各别抽换所引用的演算法. 其UML表示法 GoF说strategy也称为policy,我个人喜欢称它为plugin,因为可以动态的换演算法,如同在ecl

解读设计模式----外观模式(Facade Pattern)

一.模式简介 外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口.也称门面模式. 二.模式意图 每一种设计模式都有它的意图,我们看看设计模式的祖师们是怎么说的.按照GOF的说法,Facade模式的意图是:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 三.模式UML(下图转自http://www.dofactory.com/) 四.模式参与者 门面(Facade)角色:客户端可以调用这个角色的方

乐在其中设计模式(C#) - 外观模式(Facade Pattern)

原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 示例 有一个Message实体类,某对象对它的操作有Get()方法,另外还有一个对象有一个Validate()方法来判断用户是否有权限.现在提供一个高层接口来封装这两个方法. Messa

C#设计模式(11)——外观模式(Facade Pattern)

原文:C#设计模式(11)--外观模式(Facade Pattern) 一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 "门面"模式.下面就具体介绍下外观模式. 二.外观模式的详细介绍 2.1 定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用.使用外观模式时,我们创建了一个统一的

我的Design Pattern之旅[6]:Adapter Pattern(OO)

Abstract 在OO設計裡,我們常會定下interface要求其他class必須實現此interface,以便彼此溝通,若是新開發的專案,問題就不大:若既有的framework/library中,已經有符合需求的class,但唯一可惜的是,『因為interface並不相同』,導致無法和我的class合作,此時可使用Adpater Pattern解決. Intent 将class的interface转换成外界所预期的另一种interface,让原先囿於interface不相容问题而无法协力合作

我的Design Pattern之旅[2]:Template Method Pattern(OO)

Abstract template method pattern是我学到第二个pattern,算是一个很容易理解的pattern,但却非常的实用. Intent 对於operation,只先定义好演算法的轮廓,某些步骤则留给子类别去填补,以便在不改变演算法整体架构的情况下让子类别去精链某些步骤. 其UML表示法 在实务上,我们可能本来有一个功能完整的class,但因为『需求改变』,新的class和原来的class几乎60%相同, 只有40%不一样,因此我们希望将60%相同部份的程式留下来,仅改写