有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OOP设计:避免状态并保持依赖注入

我有一个类需要初始化,然后才能开始工作。然而,我不想在我的对象中创建它,我希望它被注入——所以我需要同时拥有init()和run()

然而,这会产生一个问题——对象现在有状态,我正试图避免它。有没有一种设计模式可以克服这种情况


共 (2) 个答案

  1. # 1 楼答案

    在本例中,听起来您应该将依赖项作为构造函数参数提供。这增加了附加final关键字的安全性,因此可以确保不再设置它

  2. # 2 楼答案

    依赖注入: 依赖注入只是将逻辑实现传递到类中的一个花哨术语。依赖注入最基本的形式是constructor。只需将不想在类中的任何对象的实例作为参数传递给构造函数

    public interface Logic
    {
        public void do();
    }
    
    public class MyClass
    {
        private final Logic logic;
    
        public MyClass(final Logic logic)
        {
            this.logic = logic;
        }
    
        public void doLogic() { this.logic.do(); }
    }
    
    public class MyLogic implements Logic
    {
       public void do() { /* custom logic goes here */ }
    }
    
    public class Main
    {
        public static void main(final String[] args)
        {
            final MyClass myClass = new MyClass(new MyLogic());
            myClass.doLogic();
        }
    }
    

    建筑类: 确保类完全构造并初始化的一个好方法是FactoryMethod模式。创建一个static MyClass create();方法,并使MyClass构造函数private初始化类,并确保它在传递之前有效

    public class MyClass
    {
        /** Factory Method, only way to create a MyClass instance */
        public static MyClass create()
        {
            final MyClass instance = new MyClass();
            // initialize class however you need it
            return instance;
        }
    
        private MyClass()
        {
            // normal constructor, if no logic you still need this
            // to make sure it can only be created by the Factory Method
            super();
        }
    }