返回

安卓自定义控件:用策略模式拥抱多变的需求,产品经理,你好!

Android

在这变化莫测的世界里,产品需求稳定不变简直就是痴人说梦。和产品经理互怼,那纯属是浪费时间,毫无益处。但是,我们有一个积极可行的方向:让代码更加具有弹性,以不变应万变。

记得上次发版前,突然变更单选按钮样式后,又新增了两个和选项按钮相关的需求。这两个需求分别是多选和菜单选。多选类似于原生CheckBox,而菜单选则是多选和单选的结合体,也就是说,如果点击多选,将会有一个菜单展开,可以在其中进行选项选择。

让我们面对现实吧!需求的变化是无法避免的,而我们作为开发者,必须具备应对这些变化的能力。策略模式就是我们应对变化的有力工具。

策略模式是一种设计模式,它允许我们使用不同的算法或行为来处理相同的问题。在我们的例子中,我们可以使用策略模式来处理不同的选项按钮类型。

运用策略模式扩展单选按钮

第一步,我们需要定义一个抽象类来表示选项按钮。这个抽象类将定义一个方法,该方法用于处理选项按钮的点击事件。

public abstract class OptionButton {
    public abstract void onClick();
}

接下来,我们需要定义具体的策略类来实现不同的选项按钮类型。

public class RadioButton extends OptionButton {
    @Override
    public void onClick() {
        // 处理单选按钮的点击事件
    }
}

public class CheckBox extends OptionButton {
    @Override
    public void onClick() {
        // 处理多选按钮的点击事件
    }
}

public class MenuButton extends OptionButton {
    @Override
    public void onClick() {
        // 处理菜单按钮的点击事件
    }
}

最后,我们需要创建一个类来将策略类和抽象类联系起来。

public class OptionButtonContext {
    private OptionButton optionButton;

    public OptionButtonContext(OptionButton optionButton) {
        this.optionButton = optionButton;
    }

    public void onClick() {
        optionButton.onClick();
    }
}

现在,当我们想要使用不同的选项按钮类型时,我们只需要创建一个新的策略类并将其传递给OptionButtonContext即可。

OptionButtonContext context = new OptionButtonContext(new RadioButton());
context.onClick(); // 处理单选按钮的点击事件

context = new OptionButtonContext(new CheckBox());
context.onClick(); // 处理多选按钮的点击事件

context = new OptionButtonContext(new MenuButton());
context.onClick(); // 处理菜单按钮的点击事件

策略模式的优势在于,它使代码更加灵活和可扩展。当我们需要添加新的选项按钮类型时,我们只需要创建一个新的策略类即可。

结语

使用策略模式,我们可以轻松地扩展单选按钮,以满足不断变化的需求。这种模式不仅使代码更加灵活和可扩展,而且还可以让产品经理和开发者和谐共处,实现双赢。