Facade模式

在开发时,有时已经实现了一些接口,这些接口分布在不同的类或模块中。

客户在使用时,须要使用几个接口的组合。可是并不关心这些接口在哪,怎么实现这些接口的。为了便于客户使用,给客户提供一个一致的界面。能够使用Facade模式。此模式定义了一个高层接口,使得子系统更加easy使用。

Facade模式的类结构图例如以下:

事实上现例如以下:

//Facade.h

//Facade.h

#ifndef _FACADE_H_
#define _FACADE_H_
class Subsystem1
{
public:
    void Operation();
};

class Subsystem2
{
public:
    void Operation();
};
class Facade
{
public:
    Facade();
    ~Facade();
    void WrapperOperation();
private:
    Subsystem1* sub1;
    Subsystem2* sub2;
};

#endif

//Facade.cpp

//Facade.cpp

#include "Facade.h"
#include<iostream>
using std::cout;
using std::endl;

void Subsystem1::Operation()
{
    cout<<"Subsystem1 Operation"<<endl;
}

void Subsystem2::Operation()
{
    cout<<"Subsystem2 Operation"<<endl;
}
Facade::Facade()
{
    sub1=new Subsystem1();
    sub2=new Subsystem2();
}
Facade::~Facade()
{}
void Facade::WrapperOperation()
{
    cout<<"Facade Operation"<<endl;
    sub1->Operation();
    sub2->Operation();
}

//main.cpp

//main.cpp
#include"Facade.h"

int main()
{
    Facade* fa=new Facade();
    fa->WrapperOperation();
    return 0;
}
时间: 2024-10-17 14:25:00

Facade模式的相关文章

设计模式之五-Facade模式

Facade门面模式,也是比较常用的一种模式,其含义是为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用. 以收发信件和警察检查实例为例 说明:邮局对外只有一个窗口,接收信件内容和邮件地址.对内调用邮件处理的4个函数.将复杂逻辑封装在邮局的里面,当需要增加警察来检查信件时,只需在邮局内增加警察检查信件的方法. 注意:将复杂逻辑封装起来,对外只有一个简单的接口. 抽

使用Facade模式更新库存、确认订单、采取打折、确认支付、完成支付、物流配送

Facade模式对外提供了统一的接口,而隐藏了内部细节.在网上购物的场景中,当点击提交订单按钮,与此订单相关的库存.订单确认.折扣.确认支付.完成支付.物流配送等都要做相应的动作.本篇尝试使用Facade模式,把这些类似工作者单元的动作隐藏到一类中,只要点击提交订单,余下的事情一步到位: □ 关于库存 namespace ConsoleApplication1.Interfaces { public interface IInventory { void Update(int productId

设计模式-facade模式

facade模式-门面模式 现代医院看病是一件非常麻烦的事情,按职能分,有挂号.门诊.划价.化验.收费.取药等.看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情. 如果将每一个部门都看作一个类,那么客户端类与各个类之间的调用关系就会非常的复杂.如果我们成立一个部门,专门帮我们与这些部门打交道,我们需要看病的时候,只需要找这个部门,就能够解决很多事情了.

Facade 模式

在软件系统开发中经常回会遇到这样的情况,你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如 A和 B.C.D) :A中实现了一些接口,B 中实现一些接口(或者 A代表一个独立模块,B.C.D代表另一些独立模块) .然后你的客户程序员 (使用你设计的开发人员) 只有很少的要知道你的不同接口到底是在那个类中实现的,绝大多数只是想简单的组合你的 A-D的类的接口,他并不想知道这些接口在哪里实现的.这时我们就要用到Facade 模式,Facade 模式在高层提供了一个统一的接口. 1 /

Design Pattern Explain 读书笔记二—— Facade 模式

what? Provide a unified interface to a set of interfaces in a sub- system. Facade defines a higher-level interface that makes the subsystem easier to use. --GOF 给子系统中的一堆接口提供一个统一,标准的接口--更高层次的接口--这样使得子系统更易于使用. Facade模式的特点: 对应的译文: 意图: 希望简化原有系统的使用方式.需要定义

Facade模式详解--设计模式(10)

Facade模式产生原因: 老旧的code(尤其是将C的代码转成C++代码)或者即便不是老旧code,但涉及多个子系统时,除了重写全部代码(对于老旧code而言),我们还可能采用这样一种策略:重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的.统一的接口,供上层应用使用.这在某种意义上与Adapter及Proxy有类似之处,但是,Proxy(代理)注重在为Client-Subject提供一个访问的中间层,如CORBA可为应用程序提供透明访问支持,使应用程序无需去考虑平台及网络

Facade模式实现文件上传(Flash+HTML5)

一.前言 确定了渐进式增强的上传方式,接下来我们需要将上传功能从具体的业务逻辑中剥离出来,作为公共组件供业务层调用.这就要求我们必须对业务层隐藏上传细节,只暴露统一的上传API.这时候大家是不是跟我一样想到了Facade模式? 二.Facade模式实现文件上传,代码示例: /* 上传组件,IE浏览器默认flash上传,其它浏览器html5 示例: var fileUpload = new FileUpload({ container: document.getElementById("uploa

java 实现外观(Facade)模式

/** * 角色 * @author stone * */ public class Actor { public Actor(String name) { System.out.println("创建了角色: " + name); } public void load() { System.out.println("角色加载"); } public void unload() { System.out.println("角色退出,存档"); }

Facade模式[f??sɑ?d]

Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行.Facade模式提供一个高层次的接口,使得子系统更易于使用. 就如同医院的接待员一样,Facade模式的Facade类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与Facade对象打交道,而不需要与子系统内部的很多对象打交道. 观察者模式的结构 Facade的几个要点 从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种"解