[设计模式]结构模式-外观模式(C++描述)

 [设计模式]结构模式-外观模式(C++描述)

1. 什么是外观模式

外观模式为子系统中的各类提供了一个统一简明的外观,隐藏了子系统的复杂性,使子系统更加容易使用。

 

简单地说:把多个类进行统一,组合成新接口,供上层使用。

如:A类,B类,C类,对于客户来说,并不需要知道他们在哪,客户只需知道新类D,通过D能调用到ABC类的功能。

 

在实际开发中,外观模式运用非常广泛。

 

2. 外观模式结构图

 

分析:

子系统角色类:SubSystem1,SubSystem2,不同的子系统实现不同的功能

外观角色类:组合了多种子系统,并对外提供统一的接口

 

代码:

// 现有功能类1

class  SubSystem1

{

public:

SubSystem1(){}

~SubSystem1(){}

void Operation(){}

};

// 现有功能类2

class  SubSystem2

{

public:

SubSystem2(){}

~SubSystem2(){}

void Operation(){}

};

 

// 在不改变现有类的情况下,使用外观模式,新建新类

// 使得客户无须关心复杂系统城的多个类,而直接调用

class  Facade

{

public:

Facade()

{

_subSystem1 = new SubSystem1();

_subSystem2 = new SubSystem2();

}

~Facade()

{

delete _subSystem1;

delete _subSystem2;

}

void OperationWrapper()

{

subSystem1->Operation();

subSystem2->Operation();

};

private:

SubSystem2 _subSystem2;

SubSystem1 _subSystem1;

};

 

// 使用,客户无须知道内部具体怎么复杂实现

Facade * f = new  Facade();

f->OperationWrapper();

 

 

外观模式在高层提供了一个统一的接口,解耦了系统。

 

2.1优点

1. 它对客户屏蔽了子系统内部的实现,减少了客户处理对象的数目,更加方便

2. 它实现了子系统与客户之间松耦合的关系,子系统内部是紧耦合关系。

3. 如果应用需要,可以直接调用子系统类,可以在系统易用性和通用性之间选择。

 

2.2缺点

1. 不能限制客户使用外观类还是子系统类

2. 新增子系统,需修改外观类,不符合开闭原则

 

 

3 外观模式应用

外观模式应用非常广泛,如下

1. 为一个复杂的子系统提供提一个简单的接口时。

2. 引入外观模式可以将客户与子系统分离,提高子系统的独立性和可移植。

3. 当需要构建一个层次结构的子系统时,使用外观模式定义子系统的入口。

 

 

4 例子

1. 代码生成工具,功能包括:表现在代码生成,逻辑层代码生成,数据层代码生成,配置数据生成。可以提一个统一的外观类,里面包含一个makeCode(),自动生成代码即可

2. 客户的某一调用流程需通过ServiceA,ServiceB,ServiceC,可以提供一个外观类,封装好ServiceFacade,让外观类统一处理,客户无须知道里面具体有多少其他服务。

 

 

4 总结

外观模式是运用非常多的模式,在平时项目里,旧的类库或已上线的类库,是不能随便修改的,如果涉及到多个类库同时服务,或在旧类库的具体上添加新的服务,即会用上外观模式,使系统变得更容易扩展和维护,同时也不会影响到原有上线的产品。

简单,好用,易扩展,可维护,是外观模式的特点。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值