Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 传递给构造函数或创建_Oop - Fatal编程技术网

Oop 传递给构造函数或创建

Oop 传递给构造函数或创建,oop,Oop,虽然两者都是正确的,但以下哪一项是推荐的方法: public class MyService(MyRepository ...) { ... } 或 前者意味着这应该是存储库的公共getter,这违背了只允许服务控制存储库的目的。这取决于您的需求,但我建议如下示例所示 公共构造函数在依赖项注入中非常有用 受保护的构造函数可以使用它自己的类和子类(在单例设计模式中有用)。它也是抽象类的有用构造函数 私有构造函数可以在其自己的类中使用,并确保不应有多个对象(在单例设计模式,生成器设计模式中

虽然两者都是正确的,但以下哪一项是推荐的方法:

public class MyService(MyRepository ...) {
    ...
}


前者意味着这应该是存储库的公共getter,这违背了只允许服务控制存储库的目的。

这取决于您的需求,但我建议如下示例所示

公共构造函数在依赖项注入中非常有用

受保护的构造函数可以使用它自己的类和子类(在单例设计模式中有用)。它也是抽象类的有用构造函数

私有构造函数可以在其自己的类中使用,并确保不应有多个对象(在单例设计模式生成器设计模式中有用)


第一个。这是松散耦合的。这意味着您可以决定如何实例化
MyRepository
,甚至提供一个子类来覆盖行为。它还有助于只实例化一次
MyRepository
,并在多个位置使用同一实例

另外,请参阅更多

public class MyService() {
    myRepository = CreateMyRepository();
}

protected MyRepository CreateMyRepository() {
    ...
}
 class MyService {
      private MyRepository myRepository;

      public MyService(MyRepository myRepository){
          this.myRepository= myRepository;  

      }

      public String getMyRepository() { return myRepository; }

       public void setMyRepository(MyRepository myRepository)
       {    
       this.myRepository= myRepository;
      }

    }