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

2016-07-22

(www.cnblogs.com/icmzn)



模式理解

 

1. 门面模式 facade ,又称为外观模式
    要求所有外部与一个子系统的所有通信必须通过一个“统一的对象”进行。这个对象就是子系统的“门面”,即门面提供一个统一的调用接口,使得
    子系统能够简单使用。
    门面模式注重“统一的对象”,除了这个统一的对象外,不允许以其他方式调用子系统的行为发生。子系统可以是一个类对象或者一组对象的集合,更直观的
    讲不管子系统内是多么杂乱无章,只要“统一对象”是简约整洁即可,即“金玉其外败絮其中”的效果。
    一般两个角色:
    (1)Facade门面对象
        该角色没有实际的业务逻辑,只是一个委托类。一定注意,门面方法不参与业务逻辑,否则就产生一个倒依赖的问题,子系统必须依赖门面才能被访问。
        这违反了接口的单一原则。在系统中,门面模式应该是稳定的,不应该经常发生变化,应该发所有可能发生变化的操作封装在子类中完成,无论怎样,
        从外部来看就是一个单纯的门面。
    (2)Subsystem 子系统对象的集合
2. Facade 模式优点

3. Facade 实用场景
    一个系统比较复杂时,可以通过门面模式实现一个很好的封装。如果算法或者业务比较复杂时,可以封装一个多个门面出来,结构简单并且扩展性好。

4. Facade 讨论与扩展



程序实现(C++)

Fecade.h

 1 #pragma once
 2 #include <iostream>
 3 using namespace std;
 4
 5 class CSubSysA
 6 {
 7 public:
 8     void doMethiodA()
 9     {
10         cout << "A系统的调用" << endl;
11     }
12 };
13
14 class CSubSysB
15 {
16 public:
17     void doMethiodB()
18     {
19         cout << "B系统的调用" << endl;
20     }
21 };
22
23 //为了不门面对象不参与具体的业务逻辑,将子系统进行一层的封装,提供统一的接口
24 class CSubSysC
25 {
26 public:
27     CSubSysC(CSubSysA* pA, CSubSysB* pB) :m_pSubA(pA), m_pSubB(pB){};
28     //不管理成员指针指向对象
29     ~CSubSysC()
30     {
31
32     }
33
34 public:
35     void doMethiodAB()
36     {
37         m_pSubA->doMethiodA();
38         m_pSubB->doMethiodB();
39     }
40 private:
41     CSubSysA* m_pSubA;
42     CSubSysB* m_pSubB;
43 };
44 class CFacadeDef
45 {
46 public:
47     CFacadeDef();
48     ~CFacadeDef();
49 };
50
51 class CFacade
52 {
53 public:
54     CFacade()
55     {
56         m_pSubA = new CSubSysA();
57         m_pSubB = new CSubSysB();
58         m_pSubC = new CSubSysC(m_pSubA, m_pSubB);
59     }
60     ~CFacade()
61     {
62         delete m_pSubA;
63         delete m_pSubB;
64         delete m_pSubC;
65     }
66 public:
67     //统一模板类接口对象
68     void doMethiodA()
69     {
70         m_pSubA->doMethiodA();
71     }
72     void doMethiodB()
73     {
74         m_pSubB->doMethiodB();
75     }
76     //这样处理是为了不使模板类参与具体的业务对象
77     void doMethiodAC()
78     {
79         m_pSubC->doMethiodAB();
80     }
81
82 private:
83     CSubSysA* m_pSubA;
84     CSubSysB* m_pSubB;
85     CSubSysC* m_pSubC;
86 };


(1)模板应用

main.cpp

 1 // Facade.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include "FacadeDef.h"
 6
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9     CFacade* pFacade = new CFacade();
10     pFacade->doMethiodA();
11     pFacade->doMethiodB();
12     pFacade->doMethiodAC();
13     delete pFacade;
14     system("pause");
15     return 0;
16 }

(2)输出展示

 

时间: 2024-10-07 23:26:36

23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade的相关文章

23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy

2016-07-18 (www.cnblogs.com/icmzn) 模式理解   1. Proxy 代理模式    为其他对象提供一种代理可以间接控制这个对象的访问.    又称为“委托模式”,其他设计模式也是在代理模式的基础上扩展的,如“策略模式”“状态模式”“访问者模式”,代理模式的特殊应用.在Spring的AOP技术,以及Struts的From元素映射就是代理行为.    一般代理具有多种版本(扩展)如:普通代理模式,强制代理模式,动态代理模式    一般代理的角色:    (1)CAb

23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype

2016-07-21 (www.cnblogs.com/icmzn) 模式理解 1. Prototype  原型模式定义    提供了类的自我复制的能力,即通过已有对象进行新对象的创建.因为原型模式实在内存中进行二进制流的拷贝,所以比直接通过new 一个对象性能好.不同的实现方式与具体的语言相关. 2. 原型模式的优点(1)性能优良,实在内存中基于二进制的拷贝(2)在进行原型模式的时候,并不通过构造函数. 3. 原型模式的适用场景(1)需要根据已有对象创建大量的对象:(2)某个对象的创建需要有大

23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite

2016-07-22 (www.cnblogs.com/icmzn) 模式理解   1. Composite组合模式    又称为部分整体模式,主要用来描述部分与整体的关系.    将对象组合成树状结构以表示“部分-整体”的层次结构,是用户对“单个对象”和“组合对象”的使用具有一致性.    一般该模式具有三个角色:    (1)AbsComponent角色:一般为抽象父类,抽象“单个对象”“组合对象”公共的行为和方法,可以提供一些默认的方法或行为实现.    (2)Leaf角色:描述的是“单个

23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter

2016-07-22 (www.cnblogs.com/icmzn) 模式理解 1. Adapter 定义    将一个类的接口变换为客户端所期待的另一种接口形式,使被适配者Adaptee能用用在目标target的环境中    一般可以分为以下角色:    (1)Target角色:        定义把其他类或者对象转化为的目标接口.通常为一个抽象类(接口).    (2)Adaptee角色:        定义被转化的类,它是已经存在的类或者对象    (3)Adapte角色:        

23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge

2016-07-22 (www.cnblogs.com/icmzn) 模式理解   1. Bridge模式的定义    将抽象与实现解耦,使两个可以独立的发生变化.桥接模式的重点在“解耦”.    一般桥接模式有以下四个角色    (1)“抽象角色的抽象”:通过组合保留“实现橘色”的引用.    (2)具体的“抽象角色”:通过组合引用的实现类,对实现类抽象进行操作处理.    (3)“实现角色的抽象”:抽象类,定义实现角色必须的动作和行为.    (4)具体的实现角色:完成实现类角色抽象的具体的

23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory

2016-07-18 (www.cnblogs.com/icmzn) 模式理解   1. Flyweight 模式,即享元(共享单元)模式    Flyweeight是拳击比赛中的特有名词,称为“特轻量级别”,则在设计模式中指的的是类要轻量.类的粒度要细,可以实现细粒度类的复用,但没有缺乏共享的机制,即多线程下类不可复用.    享元模式,是“池技术”的重要实现方式,但二者并不等价.使用享元模式可以支持大量的细粒度的对象的共享.    因为创建太多的对象到程序中有损程序的性能,可以采用享元模式的

IOS学习笔记---C语言第四天

1 //?生成2个数组,每个数组都有10个元素,元素取值范围20-40之间,数组对应元素相 加,放到另外?一个数组中 2 #import <Foundation/Foundation.h> 3 4 int main(int argc, const char * argv[]) 5 { 6 7 int num1[10]={0},num2[10]={0},num3[10]={0}; 8 for (int i = 0; i<10; i++) { 9 num1[i]=arc4random()%2

iOS学习笔记---c语言第十一天

函数指针 一.函数指针定义 //函数声明:声明我是一个什么函数 //求两个数的和 //函数的类型:int (int x,int y) //即:我是一个返回值为整型,有两个整型参数的函数. //函数名是 sum int sum(int x,int y); 函数指针定义p是变量,其他是类型(通常没有形参a,b) //函数指针类型 int (*)(int x,int y) //描述:指向 返回值为 int 两个int参数 的 指针类型 //函数指针变量: p //初始值 : sum printf("%

iOS学习笔记---c语言第九天

高级指针 指向结构体变量的指针,称为结构体指针 可以使用->指向内容. %p打印地址 void pLenth(cPoint *p1,cPoint *p2) //求两点间的距离  用的开方函数sqrt()和平方函数pow(,) { float a = sqrt(pow((p1->x-p2->x), 2)+pow((p1->y-p2->y), 2)); printf("两点距离为%.2f\n",a); } //main.m中代码 #import <Fou