Tango Blog

Happy Hacking

设计模式(22)–享元模式

享元模式是一个结构性设计模式,可以通过共享相近的状态来减少系统的存储开销。当一个系统需要创建很多对象,并且这些对象共享一些状态时我们可以考虑使用享元模式。 运用共享技术有效地支持大量细粒度的对象。 1.模式适用性 一个系统使用了大量的对象 由于使用大量对象,造成很大的存储开销 对象的大多数状态可变为外部状态 如果删除对象的外部状态,那么可以用相对较少的共享...

设计模式(21)-中介者模式

中介者模式用于解决多个对象相互通讯的问题,当多个对象需要相互通讯时需要了解彼此的接口,使得对象之间成为紧耦合的关系,使用中介者模式将对象间通讯分离开来,通讯将通过中介者,起到通讯对象的解偶作用。 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 1.模式适用性 一组对象以定义良好但是复杂的方...

设计模式(20)-职责链模式

职责链模式将请求响应者串成一条链,一般的请求响应者保存一个下家响应者,当无法处理请求的时候将此请求交给下家响应者,直到请求得以被处理。 职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 1.模式适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确...

设计模式(19)-命令模式

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”,但在某些实际应用场景下我们需要对请求进行记录、撤销等操作,这是这种紧耦合的结构不能满足需求的变化,此时我们可以使用命令(Command)模式来应用在这种场景。 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 1.模式适用性 系统需要将...

设计模式(18)-桥接模式

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,多维度的变化使得继承关系无法很好的处理系统扩展的问题,这一回说道的桥接模式可以使用在多维度的系统上。 将抽象部分与实现部分分离,使它们都可以独立的变化。 1.模式适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。 如果一个...

设计模式(17)–迭代器模式

迭代器模式是一个非常常用的设计模式,STL模板中就使用了迭代器设计模式,各种容器的“iterator”就是使用了迭代器模式。我们看一下《设计模式》如何描述这个这个设计模式: 提供一种方法顺序访问一个聚合对象中各个元素 , 而又不需暴露该对象的内部表示。 1.模式适用性 访问一个聚合对象的内容而无需暴露它的内部表示。 支持对聚合对象的多种遍历。 为遍历不同的聚合...

设计模式(16)-组合模式

组合模式是结构型模式中的一种,其组织类似与“树”。使用组合模式可以将整体与部分一视同仁的对待,这样忽略了组合对象与单个对象之间的不同。在处理整体与部分间的层次结构的时候也应该考虑使用组合模式的使用。 组合模式(Composite),将对象组合成树型结构以表示’部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 1.模式适用性 想表示对象的部...

设计模式(15)-备忘录模式

备忘录模式顾名思义就是用于保存一个类的状态的设计模式。这个 模式可用于类似“撤销”等功能的实现。设计模式中如此描述备忘录模式(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 1.模式适用性 必须保存一个对象在某一个时刻的 (部分)状态, 这样以后需要时它才能恢复到先前的状态。 ...

设计模式(14)–适配器模式

当系统的数据和行为都正确,但是接口不符合使用要求时,我们应该考虑使用适配器模式,目的是控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。在使用C++的情况下我们可以利用C++的多重继承实现类适配器模式,另一个是对对象适配器模式。《设计模式》中如此描述适配器模式: 适配器模式(Adapter)将一个类的接口转换...

Linux实时框架Xenomai简介

1. Xenomai是什么 Xenomai是一个于Linux平台上使用的实时框架,其使得各种实时操作系统(vxWorks、QNX等)的API在Linux平台上可用,并且为Linux平台提供硬实时调度保障。 Xenomai不仅可以运行主线Linux内核,也可以运行于各种嵌入式平台,官方对许多嵌入式平台做了支持。我们可以从这里https://xenomai.org/embedded-hard...