我认为这是D提供的又一个重量级的功能.闲言少叙,代码说话!
保存为cre.d,使用dmd cre.d编译.
module cre;
import std.stdio;
interface IPrinter
{
void print();
void init(char[] a);
}
class foo :IPrinter
{
void print()
{
writefln("foo OK "~fb);
}
void init(char[] a)
{
fb = " Hollo "~a;
}
char[] fb;
}
class fbb :IPrinter
{
void print()
{
writefln("fbb:OK! "~fb);
}
void init(char[] a)
{
fb = "Thank you "~a;
}
char[] fb;
}
//IOC Factory.
class Factory(T)
{
static T create(char[] Name)
{
T instance =cast(T)Object.factory(Name);
assert(instance);
return instance;
}
}
int main()
{
writefln("Factory Test!");
alias Factory!(IPrinter) PT;
IPrinter a = PT.create("cre.foo");
a.init("Walter!");
a.print();
IPrinter b = PT.create("cre.fbb");
b.init("Walter!");
b.print();
return 1;
}
根据这个功能,结合动态链接库,可以提供简单插件的功能了!!!
实现了IOC,针对抽象进行依赖.
昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错.
分享到:
相关推荐
(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象 (3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数 (4) 调用相关导出函数操作 HPSocket 对象 (5) ...... ...... (6) 调用 ::...
3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过Hibernate API操纵数据库 3.5.1 Hibernate的初始化 3.5.2 访问Hibernate的Session...
b. 创建一个班机链表,每个节点都包含指向一个乘客链表的指针; c. 该程序要有顾客购票,查询班机起飞降落时间,班机订票情况等3个功能,并实现菜单选项 5、 用C++编写一个简单的行编辑器,每个结点保存一...
│ 3-用户管理模块-分配角色-功能实现 │ 4-RBAC权限模块- │ 5-数据库表之间关系 │ 6-类与类之间关系 │ 7-分析许可维护树型结构, G5 A7 ^2 |/ q; P" U │ 8-创建许可模块的组件-bean,controller,service,mapper6 ...
3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过Hibernate API操纵数据库 3.5.1 Hibernate的初始化 3.5.2 访问Hibernate的Session...
3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过Hibernate API操纵数据库 3.5.1 Hibernate的初始化 3.5.2 访问Hibernate的Session...
3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过Hibernate API操纵数据库 3.5.1 Hibernate的初始化 3.5.2 访问Hibernate的Session...
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
D []--实例化一个空数组对象 实例化空数组:var arr=[]; 特点:元素个数不限定,元素类型不限制 13.Array 对象的常用方法: |--1.join()方法--用于把数组中的所有元素放入一个字符串 | eparato表示要使用的...
更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。(但我个人认为了解系统原理对开发很有帮助) 正因为MFC是建立在C++的...
面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得...
实际上在python中用列表就可以实现动态变量名的管理,python中的列表中可以存储任何类型的元素: listA = [0,"str",B()] ...以上这篇对python创建及引用动态变量名的示例讲解就是小编分享给大家的全部内容了,
样式的语法动态创建专业质量的 Microsoft Word 文档。 Caracal 不是一个神奇的 HTML 到 Word 翻译器。 相反,它是一种用于生成 Office Open XML (OOXML) 的标记语言。 程序员通过针对文档对象发出一系列简单命令来...
第三部分“编写分布式应用程序”描述如何创建We b服务器应用程序,如C G I应用程序或动态链接 (D L L)。C + + B u i l d e r提供特殊的I n t e r n e t组件,能够更易于处理与特殊的统一资源标识符( U R I...
A、自然语言 B、机器语言 C、汇编语言 D、高级语言 12.汇编语言是一种 ___C__ 。 A、机器语言 B、高级语言 C、低级语言 D、目标程序 13.PowerPoint是著名的___A___,可用以制作计算机化的演示材料。 A、简报软件 B...
第三部分“编写分布式应用程序”描述如何创建We b服务器应用程序,如C G I应用程序或动态链接 (D L L)。C + + B u i l d e r提供特殊的I n t e r n e t组件,能够更易于处理与特殊的统一资源标识符( U R I...
用C++语言编制的源程序要变为目标程序必须要经过( d )。 (a) 解释 (b) 汇编 (c) 编辑 (d) 编译 3.C++程序基本单位是( c )。 (a) 数据 (b) 字符 (c) 函数 (d) 语句 4. C++程序中的语句必须以( b )结束。 ...
Java 语言是从 C++ 语言改进重新设计的, Java 语言的创始人 James Gosling 希望创建一种与 C++ 兼容的语言,但是更加安全、简单和面向对象。 2. 下列语句哪一个正确() 答案:B.Java 程序经编译后会产生 ...