使用抽象子类设置超级属性
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 负责保持价值观。
希望这对您有所帮助。
是否可以(对于 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 负责保持价值观。
希望这对您有所帮助。