Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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
Java 设计模式-设计类_Java_Design Patterns - Fatal编程技术网

Java 设计模式-设计类

Java 设计模式-设计类,java,design-patterns,Java,Design Patterns,我对设计和构造类是新手,最近开始学习基于模式的类设计方法 我想知道哪种方法更好,以及为什么更好 我的第一种方法是接受默认构造函数级别的对象,并在其上运行关联的方法。对象的构造可能从其他类实例或通过一些静态方法获取类 第二种方法是通过构造函数接受对象并在其上运行方法 到目前为止,我已经创建了类似于以下代码模式的设计 public class TestPattern { // Some X method or method of some other object is // ta

我对设计和构造类是新手,最近开始学习基于模式的类设计方法

我想知道哪种方法更好,以及为什么更好

  • 我的第一种方法是接受默认构造函数级别的对象,并在其上运行关联的方法。对象的构造可能从其他类实例或通过一些静态方法获取类

  • 第二种方法是通过构造函数接受对象并在其上运行方法

  • 到目前为止,我已经创建了类似于以下代码模式的设计

    public class  TestPattern
    {
        // Some X method or method of some other object is
        // taking care of constructing Object in it's client code
    
        MyObject object= MyObject.GetInstance(10); 
    
        public TestPattern()
        {
            System.err.println("Status of MyObject: "+object);
        }
    
        public TestPattern(MyObject object)
        {
            this.object=object;
        }
    
        public void run()
        {
            object.execute();
        }
    
        public static void main(String[] args) 
        {
            new TestPattern().run();
    
            // Constructor is directly responsible
            //for creating object in it's client code.
    
            new TestPattern(new MyObject(25)).run(); 
        }
    }
    


    也许你应该试着通过考虑一些真实世界的场景来了解课程。无论您试图用这个测试类完成什么,它都有点混乱。试着用一句简短的话来描述你想从你的对象/类中得到什么(例如,程序应该创建一个汽车对象的10个实例,每个汽车实例将显示一个不同的注册号/许可证)。它们之间的区别是什么?“1.我的第一种方法是在默认构造函数级别接受对象并在其上运行关联方法。”“2.第二种方法是通过构造函数接受对象并在其上运行方法。”除了短语“在默认构造函数级别”之外,这些句子是相同的。这个短语是什么意思?它如何区分这两者?“客户机类永远不会直接负责构建实例”。这就是我正在努力实现的目标。在上面的示例场景中,TestPattern是我的客户机类。1.实例将通过在客户端类中使用MyObject的构造函数(即本例中的TestPattern)直接创建,或者通过使用一些第三方类方法直接创建。一种方法是直接暴露(直接分配),另一种方法是间接暴露(使用其他类/方法),所以我的问题是哪种方法更好,为什么?你使用的语言至少让我有点困惑。但在我看来,注入构造函数或一些
    Set
    方法可能是个好主意。这将有助于编写测试用例,就像编写超类型的程序一样。还要查找
    依赖项注入
    服务定位器
    class MyObject
    {
        private int n=0;
        public MyObject(int n)
        {
            this.n=n;
            System.out.println("Creating "+this);
        }                   
    
        public String toString()
        {
            return "Value: "+n;
        }
    
        public static MyObject GetInstance(int n)
        {
            return new MyObject(n);
        }
    
        public void execute()
        {
                System.out.println("Executing "+this);
        }
    }