ACE之组件配置器

简介

ACE实现了组件配置器模式,包含ACE_Service_Object,
ACE_Service_Config和ACE_Service_Repository

组件配置器组成

Component Configurator
Component Repository
«Interface»
Component
Concrete Component A
Concrete Component B

ACE_Service_Object

ACE_Service_Object相当于Component

ACE_Service_Object
+int suspend(void)
+int resume(void)
ACE_Shared_Object
+int init(int argc, ACE_TCHAR *argv[])
+int fini(void)
+int info(ACE_TCHAR **info_string, size_t length = 0)
ACE_Event_Handler

ACE_Service_Type

是服务配置器管理的基本组件类型。ACE_Service_Type使用了桥接模式

ACE_Service_Type
- ACE_TCHAR *name_
- ACE_Service_Type_Impl *type_
- ACE_DLL dll_
«Interface»
ACE_Service_Type_Impl
# ACE_TCHAR *name_
# void *obj_
# u_int flags_
# int service_type_
+void *object(void)
+int suspend(void)
+int resume(void)
+int init(int argc, ACE_TCHAR *argv[])
+int fini(void)
+int info(ACE_TCHAR **str, size_t len)
ACE_Service_Object_Type
ACE_Module_Type
ACE_Stream_Type

ACE_Service_Object_Type对应的组件类型为ACE_Service_Object
ACE_Module_Type对应的组件类型为ACE_Module
ACE_Stream_Type对应的组件类型为ACE_Stream

服务相关宏

ACE_FACTORY_DEFINE

定义为

# define ACE_FACTORY_DEFINE(CLS,SERVICE_CLASS) \
void ACE_MAKE_SVC_CONFIG_GOBBLER_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS) (void *p) { \
  ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _p = \
    static_cast< ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object *> (p); \
  ACE_ASSERT (_p != 0); \
  delete _p; } \
extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object *\
ACE_MAKE_SVC_CONFIG_FACTORY_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS) (ACE_Service_Object_Exterminator *gobbler) \
{ \
  ACE_TRACE (#SERVICE_CLASS); \
  if (gobbler != 0) \
    *gobbler = (ACE_Service_Object_Exterminator) ACE_MAKE_SVC_CONFIG_GOBBLER_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS); \
  return new SERVICE_CLASS; \
}

ACE_MAKE_SVC_CONFIG_GOBBLER_NAME拼接字符串得到
_gobble_service_class,其中service_class为用户自定义的类
ACE_MAKE_SVC_CONFIG_FACTORY_NAME拼接字符串得到_make_service_class,其中service_class为用户自定义的类

#define ACE_MAKE_SVC_CONFIG_GOBBLER_NAME(VERSIONED_NAMESPACE,SERVICE_CLASS) ACE_MAKE_SVC_CONFIG_FUNCTION_NAME(_gobble,VERSIONED_NAMESPACE,SERVICE_CLASS)

# define ACE_MAKE_SVC_CONFIG_FUNCTION_NAME(PREFIX,VERSIONED_NAMESPACE,SERVICE_CLASS) PREFIX ## _ ## SERVICE_CLASS

ACE_FACTORY_DEFINE用于定义工厂函数,得到

void _gobble_<SERVICE_CLASS> (void *p)
{
	ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _p = static_cast< ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object *> (p);
	delete _p; 
}

extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _make_<SERVICE_CLASS> (ACE_Service_Object_Exterminator *gobbler)
{
	if (gobbler != 0) 
	{
		*gobbler = (ACE_Service_Object_Exterminator)_gobble_<SERVICE_CLASS>;
	}
	return new SERVICE_CLASS;
}

ACE_FACTORY_DECLARE

工厂函数的声明,定义为

# define ACE_FACTORY_DECLARE(CLS,SERVICE_CLASS) \
extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * \
ACE_MAKE_SVC_CONFIG_FACTORY_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS) (ACE_Service_Object_Exterminator *);

即声明为

extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _make_<SERVICE_CLASS> (ACE_Service_Object_Exterminator *)

ACE_SVC_NAME

其定义为

# define ACE_SVC_NAME(SERVICE_CLASS) ACE_MAKE_SVC_CONFIG_FACTORY_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS)

即工厂函数名称,即_make_<SERVICE_CLASS>

ACE_STATIC_SVC_DEFINE

静态服务的定义

# define ACE_STATIC_SVC_DEFINE(SERVICE_CLASS, NAME, TYPE, FN, FLAGS, ACTIVE) \
ACE_Static_Svc_Descriptor ace_svc_desc_##SERVICE_CLASS = { NAME, TYPE, FN, FLAGS, ACTIVE };

定义ACE_Static_Svc_Descriptor类型变量描述服务

ACE_STATIC_SVC_REQUIRE

向服务配置器仓库中添加服务

# define ACE_STATIC_SVC_REQUIRE(SERVICE_CLASS)\
class ACE_Static_Svc_##SERVICE_CLASS {\
public:\
  ACE_Static_Svc_##SERVICE_CLASS() { \
    ACE_Service_Config::insert (\
         &ace_svc_desc_##SERVICE_CLASS); \
    } \
};\
static ACE_Static_Svc_##SERVICE_CLASS ace_static_svc_##SERVICE_CLASS;

定义ACE_Static_Svc_<SERVICE_CLASS>类,在其构造函数中将ACE_Static_Svc_Descriptor添加到服务仓库中

ACE_Service_Repository

服务仓库类,统一管理服务

1
0..n
ACE_Service_Repository
- ACE_Array_Map <size_t, const ACE_Service_Type*>service_array_
- static ACE_Service_Repository *svc_rep_
- static bool delete_svc_rep_
+int open(size_t size = DEFAULT_SIZE)
+int close(void)
+int fini(void)
+static ACE_Service_Repository * instance(size_t size = ACE_Service_Repository::DEFAULT_SIZE)
+static ACE_Service_Repository *instance(ACE_Service_Repository *)
+static void close_singleton(void)
+int insert(const ACE_Service_Type *sr)
+int find(const ACE_TCHAR name[],const ACE_Service_Type **srp = 0,bool ignore_suspended = true)
+int remove(const ACE_TCHAR name[], ACE_Service_Type **sr = 0)
+int resume(const ACE_TCHAR name[], const ACE_Service_Type **srp = 0)
+int suspend(const ACE_TCHAR name[], const ACE_Service_Type **srp = 0)
ACE_Service_Type

svc_rep_:作为ACE_Service_Repository的单例
delete_svc_rep_:是否可以删除标识,如果单例是ACE_Service_Repository自身创建的,则是可以删除,如果不是,则不能由ACE_Service_Repository来删除
open,close,fini:提供仓库的生命周期管理
static ACE_Service_Repository * instance(size_t size = ACE_Service_Repository::DEFAULT_SIZE):创建ACE_Service_Repository的单例
static ACE_Service_Repository *instance (ACE_Service_Repository *):设置单例,释放由应用来释放
static void close_singleton (void):释放申请的单例
insert :向服务仓库中添加服务
find:查找服务名为name的服务
remove:删除服务名为name的服务
resume :恢复挂起的名称为name的服务
suspend:挂起名称为name的服务

服务仓库迭代器

ACE_Service_Repository_Iterator
- ACE_Service_Repository &svc_rep_
- size_t next_
- bool const ignore_suspended_
-bool valid(void)
+int next(const ACE_Service_Type *&next_item)
+int done(void)
+int advance(void)
ACE_Service_Repository

ACE_Service_Config

ACE_Service_Config就是组件配置器模式中的Component Configurator,其结构为

ACE_Service_Config
ACE_Service_Gestalt
ACE_Service_Repository
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值