Fruit教程翻译:1. 入门,1. Getting started
让我们来看一个简单的示例:使用Fruit 来编写的一个世界妳好(Hello world)。对于这种场景,使用Fruit来实现可能有点小题大做了,但是,通过这个示例,我们能够观摩Fruit 的基本功能和语法。
#include <fruit/fruit.h>
#include <iostream>
using fruit::Component;
using fruit::Injector;
class Writer {
public:
virtual void write(std::string s) = 0;
};
class StdoutWriter : public Writer {
public:
// 类似
于
"StdoutWriter() = default;"
,但是,额外地将这个构造函数标记为
要用于注入。
INJECT(StdoutWriter()) = default;
virtual void write(std::string s) override {
std::cout << s;
}
};
class Greeter {
public:
virtual void greet() = 0;
};
class GreeterImpl : public Greeter {
private:
Writer* writer;
public:
// 类似
于
"GreeterImpl(Writer* writer) : ... {...}"
,但是,额外地将这个构造函数标记为要用于注入。
INJECT(GreeterImpl(Writer* writer))
: writer(writer) {
}
virtual void greet() override {
writer->write("Hello world!\n");
}
};
Component<Greeter> getGreeterComponent() {
return fruit::createComponent()
.bind<Writer, StdoutWriter>()
.bind<Greeter, GreeterImpl>();
}
int main() {
Injector<Greeter> injector(getGreeterComponent());
Greeter* greeter = injector.get<Greeter*>();
greeter->greet();
return 0;
}
以上程序代码的结构,可使用下面的组件图来表示。
StdoutWriter类,不依赖任何东西,并且提供了一个StdoutWriter实例。StdoutWriter 与 Writer 之间的绑定,需要有一个StdoutWriter 实例,并且提供了一个Writer 实例。GreeterImpl类需要一个Writer实例,并且提供了一个GreeterImpl实例。GreeterImpl 与 Greeter 之间的绑定,需要一个GreeterImpl 实例,并且提供了一个Greeter 实例。最后,GreeterComponent不需要任何东西,并且提供了一个Greeter实例。
使用Fruit 的时候,一般都会将复合组件放在一个 get * Component() 函数中定义,该函数首先调用 createComponent() 来创建一个空的组件,然后使用一系列的操作函数来添加子组件。此处,我们只看到了 bind<I, C>() 操作函数,实际上还有狠多其它的操作函数。然后,这一系列操作函数调用的结果,被通过一个隐式转换操作转换成预期的组件类型(在这个示例中,就是 Component<Greeter> );在这个转换过程中,Fruit会针对绑定的那些类查找其中使用 INJECT() 包装的构造函数,这就是以上的两个组件被加入的方式。注意,组件 并不需要将所有被绑定的接口都暴露出来,例如,在这个示例中,我们并没有暴露Writer接口,同时,我们也并未暴露任何的实现类。对于 getGreeterComponent() ,也可以写成另外一种返回一个 Component<Greeter, Writer, GreeterImpl, StdoutWriter> 的形式。
通常都狠有必要隐藏掉实体(concrete)类的信息,所以,当某个类被绑定到某个接口时,实现类通常并未提供。为了简化表示,在此教程的后续部分,我们会将实现类与所有相关的绑定表示为单个组件。因此,上面的图可以简化成:
在 教程 的下一部分 中,我们会观摩一个使用Fruit 实现的简单系统。
光盘加密
一点冲上天
黄河两岸湾
八子大张口
言字往里走
你一扭,我一扭
你一长,我一长
中间夹个马大王
心字做底,月字做旁
契个钉钉儿挂衣裳
坐个车车儿走咸阳
水母
叶海龙
Your opinionsHxLauncher: Launch Android applications by voice commands