gpt4 book ai didi

java - 策略模式无法访问 getter

转载 作者:行者123 更新时间:2023-11-30 03:37:08 25 4
gpt4 key购买 nike

结构

-ClassA
|---|
|---ClassAImplA
|---ClassAImplB
-Main

A 类:

public interface ClassA {

public void execute();

}

实现A:

public class ClassAImplA implements ClassA 
{
private int a = 5;

public ClassAImplA (int a){setA(a);}
@Override
public void execute() {
System.out.println(a);

}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}

实现B:

public class ClassAImplB implements ClassA 
{
private boolean b = false;

public ClassAImplB (int a){setB(b);}
@Override
public void execute() {
System.out.println(b);

}
public booelan getB() {
return b;
}
public void setA(boolean b) {
this.b = b;
}

主要:

public class main {

/**
* @param args
*/
public static void main(String[] args) {
ClassAImplA param1 = new ClassAImplA(10);
ClassA = param1;
}


}

通过这样做,我使 ClassA 可以互换,但失去了访问参数int a的能力。有没有办法让它仍然可以互换,并且仍然可以访问 int a,或者在ClassAImplB的情况下,字段boolean b

最佳答案

有一种方法,但这不是一个好主意,因为它违背了目的:

ClassAImplA param1 = new ClassAImplA(10);
ClassA = param1;
if (param1 instanceof ClassAImplA) {
param1x = (ClassAImplA) param1;
System.out.println(param1x.getA());
}

但不要这样做。它违背了该模式的目的。该模式的目的是使用 ClassA 类型的对象,无需知道它们是如何工作的。getA方法仅在ClassAImplA中定义,它是一个实现细节,不应与 ClassA 类型的用户相关。他们不应该知道。它是隐藏的。这就是所谓的良好封装和信息隐藏。

关于java - 策略模式无法访问 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com