使用抽象子类设置超级属性

Setting super properties using abstract subclasses

是否可以(对于 java 和 SOLID 主体)扩展抽象 classes 以便从超级 class 设置属性? 我想要实现的是根据 p1 的内容对 p2 应用不同的值,p3 值也将取决于 p2 的值(级联下拉菜单时类似)。 这种场景可以用设计模式来处理吗?

public interface Iface{
    public void set_p1(int i);
    public void set_p2(int i);
    public void set_p3(int i);
}

public abstract class A implements Iface{
    private int p1;
    private int p2;
    private int p3;

    public void set_p1(int i){
        this.p1 = i;
    }

    public void set_p2(int i){
        this.p2 = i;
    }

    public void set_p3(int i){
        this.p3 = i;
    }
}

这里我把p1设置为100

public abstract class setOne extends A {
    public setOne(){
        set_p1(100);
    }
}

现在我根据 p1 的值设置 p2

public abstract class setTwo extends setOne {
    public setTwo(){
        //do some work using p1
        set_p2(200);
    }   
}

现在我实例化我的 setTwo 抽象 class

public class TestClass extends setTwo {
    public TestClass(){
         super();
    } 
}

TestClass myObj =  new TestClass();

现在我希望对象的值如下:

myObj.p1 = 100

myObj.p2 =  200;

这是复杂的植入。 我觉得你过度考虑了单一责任原则。

基于你要做的事情的设计取决于p1和p2。 你可以使用 POJO 来解决这个问题。

public abstract class A {
    private int p1;
    private int p2;
    private int p3;

    public void setP1(int i){
        this.p1 = i;
    }

    public void setP2(int i){
        //do some work using p1
        this.p2 = i;
    }

    public void setP3(int i){
        this.p3 = i;
    }
}

如果您必须根据值执行一些高级逻辑,您可以为 setP2 方法提供实现。

public interface NumberFunction {
    int doCalculate(int number);
} 

并修改函数如下。

public void setP2(int i, NumberFunction function){
    int functionResult = function.doCalculate(p1);
    this.p2 = i;
}

因此号码功能负责修改您的号码。和 A class 负责保持价值观。

希望这对您有所帮助。