【问题标题】:Setting super properties using abstract subclasses使用抽象子类设置超属性
【发布时间】:2017-05-28 16:18:19
【问题描述】:

是否可以(对于 java 和 SOLID 主体)扩展抽象类以设置超类的属性? 我想要实现的是根据 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 抽象类

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

TestClass myObj =  new TestClass();

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

myObj.p1 = 100

和

myObj.p2 =  200;

【问题讨论】:

  • 一切都如前所述 myObj.p1 确实是 100,而 myObj.p1 也是 100。我是 java 新手,所以我想看看我所做的是否符合可靠的原则和java中如何使用继承。谢谢。

标签: java inheritance design-patterns solid-principles


【解决方案1】:

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

基于你必须做什么的设计取决于 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;
}

所以数字功能负责修改您的数字。和一个负责保持价值观的类。

希望这会对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多