gpt4 book ai didi

java - 设计问题 : enhance code reusability specific case

转载 作者:太空狗 更新时间:2023-10-29 14:25:22 26 4
gpt4 key购买 nike

我有几个 View 子类的实例(如 ImageView、ViewGroup、TextView 等),我让它们都实现了两个方法 a() 和 b(),它们都必须运行相同的 init() 方法这很长并且对所有人都一样。在这种情况下,我应该如何设计架构以增强代码的可重用性?

如果是 C++,我可以从 View 和一个在创建时运行 init() 并具有抽象方法 a() 和 b() 的新抽象类进行多重继承,它在 Java 中是如何实现的?

也许有某种方法可以使用某种装饰器来实现它?

最佳答案

如果我理解正确的话,您可以创建一个抽象类 AbstractView 来扩展 View 并实现您常用的 init() 方法。 AbstractView 应声明抽象方法 a()b(),但将实现留给子类。

public abstract class AbstractView extends View {
public void init() {
// common init implementation here
}

public abstract void a();
public abstract void b();
}

由于您正在尝试向一组现有子类(ImageViewViewGroupTextView 等)添加行为,您可能确实需要为每个子类(MyImageViewMyViewGroupMyTextView 等)创建一个包装器。这些子类中的每一个都将扩展 AbstractView 并实现它们自己的 a()b() 方法,但继承公共(public)的 init( ) 方法(以及在 View 类中实现的所有方法。然后您可以为 ImageViewViewGroup 中的现有行为创建委托(delegate)方法TextView等需要保持不变的。

public class MyImageView extends AbstractView {

private ImageView wrappedImageView;

public MyImageView(Context context) {
wrappedImageView = new ImageView(context);
}

// TODO: Implement other constructor wrappers

final void clearColorFilter() {
wrappedImageView.clearColorFilter();
}

// TODO: Implement other method wrappers

@Override
public void a() {
// specific implementation here
}

@Override
public void b() {
// specific implementation here
}
}

关于java - 设计问题 : enhance code reusability specific case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124606/

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