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,我需要关于我的业务逻辑的好建议 我有这样的类层次结构: Parent - Child1 implements Parent - Child2 implements Parent Child1有自己的方法和字段,就像Child2有自己的方法和字段一样 我可以写: Parent p = new Child1(); ( ( Child1 ) p ).getMethodInParent1 p = new Child2(); ( ( Chuld2 ) p ).getMethodInParent2 但

我需要关于我的业务逻辑的好建议

我有这样的类层次结构:

Parent
- Child1 implements Parent
- Child2 implements Parent
Child1有自己的方法和字段,就像Child2有自己的方法和字段一样

我可以写:

Parent p = new Child1();
( ( Child1 ) p ).getMethodInParent1

p = new Child2();
( ( Chuld2 ) p ).getMethodInParent2
但是在Child1和Child2中有很多方法。我的主要目标是只使用一个Parent-p实例。我想问一下,在代码中到处使用动态强制转换是否是一种好方法

我读过关于访客模式的文章。它能帮助我避免动态施法吗

我想问一下,这是否是在代码中处处使用动态强制转换的好方法

不,不是。一般来说,使用强制类型转换应该被视为一种例外,而不是一种规则。如果您的设计基于到处强制转换的需要,那么您应该在开始编写代码之前重新审视您的设计

(访客模式)能帮助我避免动态施法吗

是的,它可以。但是,您需要记住,在代码中引入访问者模式会显著增加代码的复杂性,因此需要进行充分的论证

我会努力将Child1和Child2的接口统一到父接口中,这样一个简单的多态性就足够了。如果这不起作用,因为代码必须针对多个对象表现为虚拟,那么我将使用访问者模式

注意:访问者模式有几个限制。其中之一是类层次结构应该合理固定。如果您计划在代码中添加新的ChildXYZ实现,那么访问者模式将是一种负担,而不是优势,因为它将使添加新类变得更加困难

我想问一下,这是否是在代码中处处使用动态强制转换的好方法

不,不是。一般来说,使用强制类型转换应该被视为一种例外,而不是一种规则。如果您的设计基于到处强制转换的需要,那么您应该在开始编写代码之前重新审视您的设计

(访客模式)能帮助我避免动态施法吗

是的,它可以。但是,您需要记住,在代码中引入访问者模式会显著增加代码的复杂性,因此需要进行充分的论证

我会努力将Child1和Child2的接口统一到父接口中,这样一个简单的多态性就足够了。如果这不起作用,因为代码必须针对多个对象表现为虚拟,那么我将使用访问者模式


注意:访问者模式有几个限制。其中之一是类层次结构应该合理固定。如果您计划在代码中添加新的ChildXYZ实现,那么访问者模式将是一种负担,而不是优势,因为它会使添加新类变得更加困难。

您提供的代码过于抽象,无法理解您的实际问题。但是,如果你发现自己在进行强制转换,并且根据实际类型,那么双重分派就是答案。使用访客。但您也可以告诉我们实际需求,这样我们可以更好地帮助您。我的任务是创建几个实体。F.e.文件、服务、数据库必须实现一个父级,F.e.接口可映射我知道如何管理文件创建、更新、删除,但我不知道服务或数据库方法。我的老板告诉我,文件、服务和数据库应该实现一个接口。所以我读到了关于Visitor的文章,使用它看起来不错,cosa它适合我的情况。但现在我需要将方法搜索添加到文件方法集中。你提供的代码太抽象了,无法理解你的实际问题。但是,如果你发现自己在进行强制转换,并且根据实际类型,那么双重分派就是答案。使用访客。但您也可以告诉我们实际需求,这样我们可以更好地帮助您。我的任务是创建几个实体。F.e.文件、服务、数据库必须实现一个父级,F.e.接口可映射我知道如何管理文件创建、更新、删除,但我不知道服务或数据库方法。我的老板告诉我,文件、服务和数据库应该实现一个接口。所以我读到了关于Visitor的文章,使用它看起来不错,cosa它适合我的情况。但现在我需要将方法搜索添加到文件方法集中。这给我带来了麻烦。是的,我读过关于添加访客应该访问的新对象的重要性。但现在我严格限制了类的数量。是的,我读过关于添加新对象的重要性的文章,访客应该访问这些对象。但现在我严格限制了课程的数量。