Facade

#include <iostream>

using namespace std;

class GtkSystem
{
public:
    void Init(int argc, char** argv);
    int EventLoop() { cout<<"GtkSystem::EventLoop"<<endl; return 0; }
};

class QtSystem
{
public:
    void Init(int argc, char** argv);
    int EventLoop() { cout<<"QtSystem::EventLoop"<<endl; return 1; }
};

class LogSystem
{
public:
    static void Logger(const char* text) { cout<<"LogSystem::Logger["<<text<<"]"<<endl; }
}; 

class GuiFacade
{
public:
    GuiFacade();
    ~GuiFacade();
    int MainLoop();
    void Logger(const char* text);

private:
#ifdef GUI_WITH_GTK
    GtkSystem* m_pGuiSystem;
#else
    QtSystem* m_pGuiSystem;
#endif
    LogSystem* m_pLogSystem;
};

GuiFacade::GuiFacade()
{
#ifdef GUI_WITH_GTK
    m_pGuiSystem = new GtkSystem;
#else
    m_pGuiSystem = new QtSystem;
#endif
}

GuiFacade::~GuiFacade()
{
    delete m_pGuiSystem;
    m_pGuiSystem = NULL;
}

int GuiFacade::MainLoop()
{
    return m_pGuiSystem->EventLoop();
}

void GuiFacade::Logger(const char* text)
{
    LogSystem::Logger(text);
}

int main(int argc, char *argv[])
{
    GuiFacade facade;

    facade.Logger("GuiSystem Startup");
    facade.MainLoop();

    return 0;
}
时间: 2024-08-26 15:53:46

Facade的相关文章

Facade 设计模式

目的 在一个子系统的一组接口上提供一个统一的接口.Facade 设计模式定义了一个更高级别的接口,使子系统更容易使用. 通过一个更加简洁的接口来包装一个复杂的子系统. 解决的问题 客户端需要一个简化的接口来覆盖复杂的子系统的总体功能. 讨论 Facade 设计模式通过一个单一的接口对象来封装一个复杂的子系统.这样减少了学习子系统复杂的学习曲线.它也实现了不同潜在客户端的低依赖性和解耦.换句话说,如果Facade 是唯一访问子系统的入口,那么它将限制一些特性何灵活性,那样则可能需要所谓的高级用户.

java演示facade(外观)模式

实际应用中,原来的代码涉及多个子系统时,重新进行类的设计,将原来分散在源码中的类结构及方法重新组合,形成新的.统一的接口,供上层应用使用. Facade所面对的往往是多个类或其它程序单元,通过重新组合各类及程序单元,对外提供统一的接口/界面. 在遇到以下情况使用Facade模式: 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越复杂.大多数模式使用时都会产生更多更小的类.这使得子系 统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一

第 7 章 门面模式【Facade Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发

外观模式(Facade)

一.外观模式介绍 面向对象的一个比较重要的法则:迪米特法则(最少知识原则):一个软件实体应当尽可能少的与其他实体发生相互作用. 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口.这个接口使得这一子系统更加容易使用.说白了,就可以理解为封装 外观模式的核心:为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用 例1:股民炒股 未使用外观模式情况 要让股民尽可能少的与股票直接打交道,给其提供一个蒙面,让股民跟蒙面打交道.这样就符合了迪米特法则,让股民尽可能少的与股票打

23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade

2016-07-22 (www.cnblogs.com/icmzn) 模式理解   1. 门面模式 facade ,又称为外观模式    要求所有外部与一个子系统的所有通信必须通过一个“统一的对象”进行.这个对象就是子系统的“门面”,即门面提供一个统一的调用接口,使得    子系统能够简单使用.    门面模式注重“统一的对象”,除了这个统一的对象外,不允许以其他方式调用子系统的行为发生.子系统可以是一个类对象或者一组对象的集合,更直观的    讲不管子系统内是多么杂乱无章,只要“统一对象”是简

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

1.意图 为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 2.动机 将一个系统划分成若干子系统有利于降低系统的复杂性.一个常见的设计目标是使子系统间的通信和相互依赖达到最小.达到该目标的途径之一是引入一个外观对象,它为子系统提供了一个统一的接口. 3.适用性 当要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容易对子系统进行定制,但这

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

Facade的定义: 为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Connection conn = null; PreparedStatement prep = null; ResultSet rset = null; try { Class.forName( "<driver>" ).newInstance(); conn = DriverManag

11.外观模式(Facade Pattern)

using System; namespace ConsoleApplication4 { class Program { /// <summary> /// 不使用外观模式的情况 /// 此时客户端与三个子系统都发送了耦合,使得客户端程序依赖与子系统 /// 为了解决这样的问题,我们可以使用外观模式来为所有子系统设计一个统一的接口 /// 客户端只需要调用外观类中的方法就可以了,简化了客户端的操作 /// 从而让客户和子系统之间避免了紧耦合 /// </summary> ///

Facade(外观)模式

Facade(外观)模式是一个功能介于工具包和完整应用程序之间的类,可提供包或子系统中类的简化功能. Facade模式通常起源于普通的程序开发.当从多个不同类中分离你的代码时,可能需要通过提取访问子系统的类来重构系统. /* * Copyright (c) 2001, 2005. Steven J. Metsker. * * Steve Metsker makes no representations or warranties about * the fitness of this softw

设计模式(七)门面模式(Facade)-结构型

门面模式Facade 门面模式:统之间的接口.框架之间的衔接 (1)使用接口的形式来开发,不需要知道接口中内部方法的实现: (2)门面模式就是为子系统对外提供的一组接口提供一个统一的界面,使得其他系统对该系统的访问都通过这个统一的界面来完成. (3)当一个负载的系统需要对外提供接口时,就需要将对提供的接口统一封装在外观类里,供外系统使用. 门面模式原理图 门面模式原理图 不用门面设计模式的情况 Holiday.java public class Holiday { public double g