2017-05-28 118 views
1

为了设置超级类的属性,可以扩展抽象类吗(对于java和SOLID主体)吗? 我想要实现的是将不同的值应用于p2,具体取决于p1的值以及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

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

现在我实例我setTwo抽象类的值设置P2

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

TestClass myObj = new TestClass(); 

现在我期待th的值È对象如下:

myObj.p1 = 100 

myObj.p2 = 200; 
+0

一切正常,如上面描述的 myObj.p1确实是100和同为myObj.p1为100 我是新来的Java,所以我想看看我做了什么符合了坚实的校长和着如何继承在java中使用。 谢谢。 –

回答

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; 
} 

所以号码功能负责修改你的号码。和一个负责保持价值的类。

希望这会帮助你。