java—如何强制两个类具有相同的特定变量集,而无需继承和注解?

e4eetjau  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(267)

我有课 Product 以及 ProductImage 我希望它们都有以下一组布尔值: toBeSynced , toBeAdded 以及 toBeDeleted 如何使用oop设计模式来实现这一点?我想到了接口,但那些是meethods的。我不想让他们延长期限 Syncable 因为感觉不对。我不想手动将这些布尔值添加到这两个类中,我希望这些布尔值来自其他地方。
编辑:我知道这可以通过注解来实现。那怎么办?

mwg9r5ms

mwg9r5ms1#

最好的方法是通过继承,通过使用抽象类来定义公共属性。
如果感觉不对,您的命名和/或设计可能不正确

abstract class Syncable {

    boolean toBeSynced;
    boolean toBeAdded;
    boolean toBeDeleted;

    abstract void sync();
    abstract void add();
    abstract void delete();
}

产品:

class Product extends Syncable {
    // impl...
}

产品图片:

class ProductImage extends Syncable {
    // impl...
}

编辑:
您应该真正考虑类将要做什么,即is-a(继承)与has-a(组合)关系,例如:
是一个 ProductSyncable 与一个 Product 有一个 Sync 对象;
就像你想到汽车一样,汽车是有轮子的,还是有轮子的?我想不是;)

a6b3iqyw

a6b3iqyw2#

如果需要,可以使用构图:

class Sync {
   boolean toBeSynced, toBeAdded ,toBeDeleted
}

class Product {
    Sync sync;
}

class ProductImage {
    Sync sync;
}
vhipe2zx

vhipe2zx3#

您可以使用合成来“混合”所需的值。
例如,我们可以有一个名为syncable的类,它具有所需的值。

public class Syncable
{
    // instance variables - replace the example below with your own
    private boolean toBeSynced;

   public void setToBeSynced(boolean toBeSynced){
       this.toBeSynced = toBeSynced;
    }

    public boolean getToBeSynced(){
        return this.toBeSynced;
    }
}

然后,以产品类为例

public class Product
{
    Syncable sync;
    public Product()
    {
        sync = new Syncable();

    }

}

完成此操作后,可以根据需要修改布尔值。

public static void main(String[] args){
        Product p = new Product();
        p.sync.setToBeSynced(false);
        System.out.println(p.sync.getToBeSynced());
}

当然,您可能希望在product类中添加另一层抽象,其中包含可以设置和获取所需布尔值的方法。
例如,可以向product类添加以下2个方法:

public void setBoolean(boolean bool){
    this.sync.setToBeSynced(bool);
}

public boolean getBoolean(){
    return this.sync.getToBeSynced();
}

然后,在程序的另一部分中,您可以

Product p = new Product();
p.setBoolean(true);
boolean bool = p.getBoolean();

相关问题