|
泛型编程与设计新思维之二
设计新思维
将设计模式(design patterns)、泛型编程(generic programming)和面向对象编程(object-oriented programming)有机的结合起来,便形成了设计新思维。其中,设计模式是经过提炼的出色设计方法,对于很多情况下碰到的问题,它都是合理而可复用的解决方案;泛型编程是一种典范(paradigm),专注于将类型抽象化,形成功能需求方面的一个精细集合,并利用这些需求来实现算法,相同的算法可以运用于广泛的类型集中,所谓泛型,就是具有在多种数据类型上皆可操作的含意;最后同面象对象编程中的多态(polymorphism)和模板(templates)等技术相结合,便获得极高层次上的具有可复用性的泛型组件。泛型组件预先实现了设计模块,可以让用户指定类型和行为,从而形成合理的设计,主要特点是灵活、通用和易用。
policies和policy类,是一种重要的类设计技术,所谓policy,是用来定义一个类或类模板的接口,该接口由下列之一或全部组成:内部类型定义、成员函数和成员变量。基于policy的类由许多小型类(称为policies)组成,每一个这样的小型类只负责单纯如行为或结构的某一方面。Policies机制由模板和多重继承组成,它们可以互相混合搭配,从而形成设计戎的多样性,通过plicy类,不但可以定制行为,也可以定制结构。
下面简单举例说明泛化思维和面向对象思维在部分设计模式中的运用。
Singletons设计模式泛化实现
Singleton模式是一种保证一个对象(class)只有一个实体,并为它提供一个全局访问点。Singleton是一种经过改进的全局变量,既在程序中只能有唯一实体的类型,它的重点主要集中在产生和管理一个独立对象上,而且不允许产生另一个这样的对象。
先让我们看看一般的C++实现的基本手法,下面是实现源码:
// Singleton.h文件中
class Singleton
{
public:
static Singleton& Instance()
{
if(!pInstance_){
if(destroyed_){ // 引用是否已经失效
OnDeadReference();
}
else {
Create(); // 第一次时创建实例
}
}
return *pInstance_;
}
private:
Singleton(); // 禁止默认构造
Singleton(const Singleton&); // 禁止拷贝构造
Singleton& operator= (const Singleton&); // 禁止赋值操作
static void Create() // 传加创建的实例引用
{
static Singleton theInstance;
pInstance_ = &theInstance;
}
static void OnDeadReference()
{
throw std::runtime_error(“ 实例被不正当消毁”);
}
virtual ~Singleton()
{
pInstance- = 0;
destroyed_ = true;
}
static Singleton *pInstance_;
static bool destroyed_;
}
// Singleton.cpp中静态成员变量初始化
Singleton* Singleton::pInstance_ = 0;
Bool Singleton::destroyed_ = false;
[1] [2] [3] 下一页 |