23种设计模式之(十一)外观模式(Facade)
本文主要介绍23种设计模式之外观模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
外观模式(Facade)
概念
外观模式,Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面,这个一致的简单的界面被称作facade,它向现有的系统添加一个接口,来隐藏系统的复杂性,这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
GoF对外观模式的定义是:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
应用场景
(1)、为复杂的模块或子系统提供外界访问的模块。
( 2)、子系统相对独立。
代码示例
C++代码示例
/************************************************************************/
/* 设计模式专题
/*
/* 外观模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180916
/************************************************************************/
#include <iostream>
class SubSystemA
{
public:
void doThing()
{
printf("SubSystemA run\n" );
}
};
class SubSystemB
{
public:
void doThing()
{
printf("SubSystemB run\n" );
}
};
class SubSystemC
{
public:
void doThing()
{
printf("SubSystemC run\n" );
}
};
class Facade
{
public:
Facade()
{
sysA = new SubSystemA;
sysB = new SubSystemB;
sysC = new SubSystemC;
}
~Facade()
{
delete sysA;
delete sysB;
delete sysC;
}
public:
void doThing()
{
sysA->doThing();
sysB->doThing();
sysC->doThing();
}
protected:
private:
SubSystemA *sysA;
SubSystemB *sysB;
SubSystemC *sysC;
};
void main()
{
Facade *f = new Facade;
f->doThing();
delete f;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 外观模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180916
##################################################################
class SubSystemA(object):
def do_thing(self):
print("SubSystemA run")
class SubSystemB(object):
def do_thing(self):
print("SubSystemB run")
class SubSystemC(object):
def do_thing(self):
print("SubSystemC run")
class Facade(object):
def __init__(self):
self.sysA = SubSystemA()
self.sysB = SubSystemB()
self.sysC = SubSystemC()
def do_thing(self):
self.sysA.do_thing()
self.sysB.do_thing()
self.sysC.do_thing()
if __name__ == "__main__":
f = Facade()
f.do_thing()