WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Symbian游戏开发简单实现设计模式

简单实现设计模式
作者:chloe  来源:GameRes  发布时间:2005-12-19 3:11:27
简单实现设计模式

发完这个贴,要休息一段时间才动笔了。


下面这些设计模式的实现都是一些简单的示例实现,如果你希望更稳固,更方便的实现,请自己修改。我以Gof的书作为蓝本,实现里面可以被抽象的设计模式,里面使用Loki, Boost, STL的一些东西,如果有疑问的话请翻阅相关书籍。

//***************************************************************************

Abstract Facrory 抽象工厂:

目的:
为了把产品的创建抽象化
为了隐藏产品的实现
为了实现一序列产品的安全创建

实现:

namespace Noir_Impl
{
template<class P>
struct CAF_Product { P* Create_Impl() { return new P; } };

template<class CProductList>
class CAF_AbstractFactory : public Loki::GenScatterHierarchy< CProductList, CAF_Product > { };
};

//IProductList是你的抽象工厂接口,CProductList是你的抽象工厂的实现

template<class IProductList, class CProductList>
struct Simple_AbstractFactory : public IProductList, private Noir_Impl::CAF_AbstractFactory< CProductList >
{
template<class IP> IP* Create()
{
typedef TypeAt< CProductList, IndexOf< IProductList, IP >::value > CP;
return CP::Create_Impl();
}
};

//***************************************************************************

Builder 产生器:

目的:
为了实现通过继承修改产品创建的某个环节

实现:

template<int stepnum> struct IBuilder;  //产生器接口,stepnum表示分几步构造

template<>
struct IBuilder<0>
{
virtual void BuildPart(Loki::Int2Type<0>&) = 0;
};

template<int stepnum>
struct IBuilder : public IBuilder< stepnum - 1 >
{
virtual void BuildPart(Loki::Int2Type<stepnum>&) = 0;
};

template<int stepnum, class T>
struct Simple_Builder //产生器
{
template<int stepnum> static void Build(T* obj)
{
obj->IBuilder<stepnum>::BuildPart(Loki::Int2Type<stepnum>());
Build< stepnum - 1 >(obj);
}
template<> static void Build<0>(T* obj)
{
obj->IBuilder<0>::BuildPart(Loki::Int2Type<0>());
}
};

//***************************************************************************

Clone Factory 克隆工厂:

目的:
为了不关心我们将创建的对象的类别
为了避免类爆炸,通过运行时的参数指定来创建新的“类”

实现:

namespace Noir_Impl
{
template<class P>
class CCL_Product

private:
P* m_obj;
public:
CCL_Product() : m_obj(NULL) { }
void Set_Impl(P* p) { assert(p); m_obj = p; }
P*   Clone_Impl()   { assert(m_obj); return new P(m_obj); } 
};

template<class CProductList>
class CCL_CloneFactory : public Loki::GenScatterHierarchy< CProductList, CCL_Product > { };
};

template<class IProductList, class CProductList>  //IProductList是你的克隆工厂接口,CProductList是你的克隆工厂的实现
struct Simple_CloneFactory : public IProductList, private Noir_Impl::CCL_CloneFactory< CProductList >
{
template<class IP> void Set(IP* p)
{
typedef TypeAt< CProductList, IndexOf< IProductList, IP >::value > CP;
CP::Set_Impl(p);
}
template<class IP> IP* Clone()
{
typedef TypeAt< CProductList, IndexOf< IProductList, IP >::value > CP;
return CP::Clone_Impl();
}
};

//***************************************************************************

FactoryMethod 对象工厂:

目的:
为了在运行时通过外部信息来创建产品
当不关心对象的类别的时候

实现;

#define CLASSID(x)   static const int CLASS_ID = x;

template< class IC, class PList >
struct Simpe_FactoryMethod : public Loki::SmallObject<>
{
template<int index> IC* Create(int id)
{
assert( id >= 0 );
typedef TypeAt<PList, index>::Result CClass;
if( id == CClass::CLASS_ID )
return new CClass;
else 
return Create<index - 1>(id);
}
template<> IC* Create<0>(int id)
{
assert( id >= 0 );
typedef TypeAt<PList, index>::Result CClass;
if( id == CClass::CLASS_ID )
return new CClass;
else 
assert(0);
}
};

//***************************************************************************

Singleton 单件:

目的:
一个安全的全局变量,你可以完全监控他的行为

实现:

template<class T>
class Simple_Init
{
private:
static T _obj;
public:
static T& Instance() { return _obj; }
};
template<class T>
T Simple_Init<T>::_obj;


template<class T>
class Lazy_Init
{
public:
static T& Instance() { static T _obj; return _obj; }
};

template< class T, template<class> class S=Simple_Init>
class Simple_Singleton : private S<T>, private boost::noncopyable, private noncreatable, public T
{
private:
operator &() const;
operator T() const;
public:
using S<T>::Instance;

bool Init()   { return Instance().Init();   }
bool UnInit() { return Instance().UnInit(); }
};

//***************************************************************************

Adapter 适配器:

目的:
为了把不吻合或不搭配的接口转换成我们希望的接口

实现:
无固定实现

//***************************************************************************

Bridge 桥接:

目的:
抽象出实现的“核心部分”和“扩展部分”,“扩展部分”由“核心部分”实现,通过切换“核心部分”来使“扩展部分”相应的改变,从而达到切换整个系统的目的

实现:
无固定实现,其实就是Policy的设计方法的一个运用

//***************************************************************************

Composite 组合:

目的:
为了把对象以及他们的组合体“一视同仁”

实现:

template<class T>
class Simple_Composite_Train : private Safe_Dector, public T, public Loki::SmallObject<>
{
private:
typedef Simple_Composite_Train<T> ClassType;
std::list<ClassType*> m_childlist;
public:
void ChildAs(ClassType* p)
{
assert(p);
p->m_childlist.pus_back(this);
}
void ParentAs(ClassType* p)
{
assert(p);
p->Chi

[1] [2] [3] [4]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码