现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

boost库与设计模式

2016-03-03 06:27 工业·编程 ⁄ 共 2226字 ⁄ 字号 暂无评论
文章目录

设计模式针对面向对象系统中重复出现的设计问题,提出了一个通用的设计方案,并予以系统化的命名和动机解释。

它描述了问题,解决方案,在什么条件下使用该解决方案极其效果。

设计模式有助于软件开发者更好更快地理解面向对象的精髓。设计出高内聚,结构良好,灵活健壮的程序。

分三种类型:1。创建型模式 2。结构型模式 3。行为型模式。

1。创建型模式:

抽象了类的实例化过程,封装了类的创建动作,使对象创建独立于系统其他部分。

1.1 抽象工厂(Abstract Factory)

把对象的创建封装在类中,通过派生子类的方式生产对象。

regex_compilerk可以通过模板技术产生各种正则表达式对象。

1.2生成器(Builder)

分解了复杂对象的创建过程。创建过程可以被子类改变,使同样的生产过程生产不同的对象。

multi_array

1.3工厂方法(Factory Method)

把对象的创建封装在一个方法中,子类可以改变工厂方法的生产行为生产不同的对象。

make_shared() make_tuple() make_optional()

1.4原型(Prototype)

类的实例通过拷贝的方式创建对象,拷贝行为可以制定。

weak_ptr的enable_shared_from_this

1.5单件(Singleton)

保证仅有一个实例。通过一个全局访问点。

pool库

2。结构型模式

如果组合类或对象进而形成更大更有用的新对象。

两种组合方式:

继承:编译期确定关系,缺乏灵活性。

运行时组合:通过接口通信,灵活易于模块化

2.1适配器(Adapter)

把一个类的接口转换为另一个接口,从而不改变原有代码的基础上复用原代码。

包装原有对象,再给一个新接口。

array

2.2桥接模式(Bridge)

分离了类的抽象和实现。解决实现的变化问题。

pimpl

2.3组合(Composite)

将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象。

property_tree multi_array xpressive

2.4装饰(Decorator)

运行时动态地给对象增加功能。比派生子类灵活。

operators库的基类链技术

2.5外观(Facade)

为大量对象提供一致接口。

random的变量发生器。屏蔽类内部细节,只提供operator()生成随机数

2.6享元(Flyweight)

通过共享的方式节约内存的使用。

配合工厂模式

xpressive库的regex_compiler 内部保存了所有正则表达式对象从而实现共享。

flyweight库直接俄实现了享元模式。

2.7代理(Proxy)

包装对象。外界不能直接访问。

smart_ptr库,optional ,ref, bind, function

3。行为模式

关注程序运行时的对象通信和职责分配,跟踪动态的,复杂的控制流和消息流。

3.1职责链(Chain of Responsibility)

把对象连成一条链,使链上每个对象都有机会处理请求。

把请求的发送者和接受者解耦,对象可以动态增减。

assign iostreams定义了source ,sink, filter

3.2命令(Command)

把请求封装成一个对象。

命令模式经常与责任链和组合一起使用:职责链处理命令模式封装的对象,组合模式把简单的命令组合成复杂的命令对象。

exception库,把错误包装在异常中,使用c++的异常机制传递,直到有一个catch处理。

3.3解释器(Interpreter)

定义一个类体系,用于实现语言的解释。

program_options

3.4迭代器(Iterator)

把按某种顺序访问一个集合中的元素的方式封装在一个对象中。无需知道集合内部的表示就可以访问集合。

boost.range, boost.iterators

3.5中介者(Mediator)

用中介对象封装了一系列对象的交互联系。

用于解耦,降低系统通信的复杂度。

呵呵,boost库暂时没有中介者模式例子。

3.6备忘录(Memento)

捕获对象的内部状态,并存在对象外,之后可以随时恢复。

io_state_savers库

3.7观察者(Observer)

定义了一对多的联系,当一个对象的状态变化时,所有与之有联系的观察者对象都会得到通知。

一个目标可以有多个观察者,一个观察者也可以观察多个目标。

java的Observer/Observable boost的singnals,singnals2

3.8状态(State)

状态变化时,行为同时改变。

boost.statechat实现了有限状态机。

3.9策略(Strategy)

封装了不同的算法,使他们在运行时可以互相替换。

3.10模板方法(Template Method)

父类定义主要步骤,但不实现,留给子类去实现。

boost.test

3.11访问者(Visitor)

分离了类的内部元素与访问他们的操作。

boost.variant ->static_visitor

4。其他模式

4.1空对象

定义了一个行为模式。扩展了空指针的涵义,给空指针一个默认的可接受的行为。

tuple -> null_type

4.2包装外观(Wrapper Facade)

包装底层API。

thread,interprocess, asio

4.3前摄器模式(Proactor)

用于异步调用的设计模式。

核心是前摄器,异步的操作处理器,异步的时间多路分离和完成时间队列,

可以不使用线程实现异步操作。

asio

总结:设计模式的目的是为了避免将来的重构!

给我留言

留言无头像?