java - 策略模式无法访问 getter

标签 java getter-setter strategy-pattern

结构

-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/

相关文章:

java - 策略模式和上下文类

生产中mysql数据库监控策略

java - 不确定要在对象字符串变量中放入什么

java - 在多个 JAVA 类之间共享字符串

java - Android 图像预览与图库/相机不同

实现文件中的 C++ Getters-Setter

java - 将 JSON 放入 getter 和 setter 中

c++ - 策略模式与继承的区别

java - Android Studio 应用程序在 Activity Start with Bluetooth Code 上崩溃

javascript - 在 Javascript 的继承类中声明 getter/setter