设计模式之策略模式

本文深入探讨了策略模式的设计理念,即分离算法与实现,允许用户在算法族中灵活选择。通过具体代码示例,展示了如何在字段校验等场景中应用策略模式,提高代码的可维护性和扩展性。

策略模式

  • 对应解决某个问题的一个算法族,允许用户从算法族中任意选一个算法解决某一问题,方便更改和添加新的算法。

  • 本质:分离算法,选择实现

  • 开发中常见的场景:

    1. JavaSe 中 GUI 编程,布局管理
    2. Spring 框架中, Resource 接口,资源访问策略
    3. javax.servlet.http.HttpServlet#service()

实际应用:
在字段校验的时候,使用了这种设计模式,将字段校验的校验规则封装成各种校验策略,在字段进行校验时进行选择。

代码示例:

定义算法接口类:

public interface Strategy {
    public boolean volidate(Object obj);
}

算法A:

public class NotNullStrategy implements Strategy {

    @Override
    public boolean validate(Object obj) {
        return obj == null;
    }

}

算法B:

public class NotDateStrategy implements Strategy {

    @Override
    public boolean volidate(Object obj) {
        return obj instanceof Date;
    }

}

定义一个 Context 对象,保存对 strategy 的应用

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public Strategy getStrategy() {
        return strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public void printPrice(Object obj) {
        System.out.println("校验结果" + this.strategy.volidate(obj));
    }

}

客户端调用:

public class Client {
    public static void main(String[] args) {
        Strategy s1 = new NotNullStrategy();
        Context c = new Context(s1);
        c.volidate(10);
    }
}

这里在客户端中,客户端需要知道两个类,Strategy 和 Context,这里可以将具体的策略选择逻辑交给 Context 处理,这样 客户端只需要和 Context 类进行交互就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值