依赖注入:所有服务方法都接收相同的新对象

时间:2014-05-10 22:57:47

标签: c++ oop design-patterns dependency-injection

让我们举一个在2D和3D之间投影和取消投影的类。

class Projector
{
    Point2D projectPoint(const Point3D& worldPoint) const;

    Point3D unProjectPoint(const Point2D& screenPoint, const Plane& plane) const;
};

两种方法都需要使用Camera对象。实现它的首选方法是什么:

一个。在Projector构造函数中传递Camera B.在每个类方法中传递Camera。 C.在使用类方法之前,以setter方法传递Camera。

选项A打破DI,因为相机是新手。选项B表示每次调用都传递相同的Camera实例。在具有5-6个方法的接口中,将相同的实例传递给每个方法将导致更少的更漂亮的代码。选项C可以工作,但是这意味着这个类的用户需要知道他应该设置Camera - 存在他将忘记这样做的风险,并且不会理解为什么代码不起作用。

实施它的首选方法是什么?

1 个答案:

答案 0 :(得分:1)

我会在构造函数中传递相机,并使用相机和投影仪作为该范围内的实例。听起来,范围是由“观点”定义的。

也许相机是观察点,投影机是相机的单身?

构造函数对我来说绝对是最好的。这可能是您如何获得投影仪和/或相机的问题。你推断一个域约束,所以编码约束。可能是约束是“观点”有一个摄像头和......投影仪。