Java 具有相似行为的两个类的最佳设计模式
我有两门课: 类,它包含许多函数Java 具有相似行为的两个类的最佳设计模式,java,design-patterns,Java,Design Patterns,我有两门课: 类,它包含许多函数 Class A{ public void a(int param1, int param2); public void b(String param1, int param2); ....} B类也有相同的功能,但有些参数是冗余的 Class B{ public void a(int param1forB){} public void b(String param1){} ....} 我有检查A类的测试。我想对B类也使用这些测试 另外两个问题
Class A{
public void a(int param1, int param2);
public void b(String param1, int param2);
....}
B类也有相同的功能,但有些参数是冗余的
Class B{
public void a(int param1forB){}
public void b(String param1){}
....}
我有检查A类的测试。我想对B类也使用这些测试
另外两个问题:
B包含在A的某些类中实现的函数。例如,A在A1类中,函数B在A2类中
我想最小化A中的变化,而在B中,我可以改变我想要的任何东西
有什么想法吗?让B扩展A,然后覆盖您希望在B中具有不同行为的方法。如果您希望使用重载更改B中方法的签名,请将该方法公开。并确保在重载时删除IDE自动添加的@override注释。
对于多重继承,您是对的,java不支持来自多类的多重继承,所以您必须选择接口来执行多重继承您可以根据 接口和组合优于继承可以帮助您解决这个问题。示例可能存在一些语法错误,我使用java已经很久了:
public interface IFunctionA{
void a(int param1, int param2);
void a(int param1);
}
public interface IFunctionB{
void b(String param1, int param2);
void b(String param1);
}
public class FunctionA implement IFunctionA{
public void a(int param1, int param2){
//do the function
}
}
// same with FunctionB
public class A{
private IFunctionA functionA = new FunctionA();
// same with b
public void a(int param1, int param2){
functionA.a(param1, param2);
}
//same with function b
}
如果类a和类B中的方法a的行为相似,则可以用参数类替换参数。这将定义两个get方法param1和param2。您需要两个构造函数,一个具有类A使用的两个参数,另一个仅具有类B的一个参数。实际上,有多个解决方案可以获得相同的结果 通过这种方式,两个类可以实现相同的接口:
public interface ABInterface {
void a(AParams params);
void b(BParams params);
...
}
public class AParams implements ABInterface {
private int param1;
private int param2;
public AParams(int param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public AParams(int param1) {
this.param1 = param1;
}
public int getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class BParams implements ABInterface {
private String param1;
private int param2;
public BParams(String param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public BParams(String param1) {
this.param1 = param1;
}
public String getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class A{
public void a(AParams params) {
...
}
public void b(BParams params) {
...
}
...
}
public class B{
public void a(AParams params){
...
}
public void b(BParams params){
...
}
...
}
public void someMethod() {
// you can new invoke these methods like this
a.a(new AParams(1,2));
b.a(new AParams(1));
// but also like this, to reuse existing code
AParams params = new AParams(1,2);
a.a(params);
b.a(params);
}
你可以让B班继续上课A@kustrle:但我需要多个扩展,Java不支持它,因为问题1.class A1实现了ifcA1{};A2类实现ifcA2{};类B实现了ifcA1,ifcA2{},但我需要多个扩展,Java不支持它,因为问题1。关于问题1,什么是B实现了A的类,类永远不会实现它可以实现接口和扩展类的类。
public interface ABInterface {
void a(AParams params);
void b(BParams params);
...
}
public class AParams implements ABInterface {
private int param1;
private int param2;
public AParams(int param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public AParams(int param1) {
this.param1 = param1;
}
public int getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class BParams implements ABInterface {
private String param1;
private int param2;
public BParams(String param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public BParams(String param1) {
this.param1 = param1;
}
public String getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class A{
public void a(AParams params) {
...
}
public void b(BParams params) {
...
}
...
}
public class B{
public void a(AParams params){
...
}
public void b(BParams params){
...
}
...
}
public void someMethod() {
// you can new invoke these methods like this
a.a(new AParams(1,2));
b.a(new AParams(1));
// but also like this, to reuse existing code
AParams params = new AParams(1,2);
a.a(params);
b.a(params);
}