设计模式-策略模式

简介:

设计模式-策略模式
以计算器为栗

最直接加减法

public class Calculator{
    // 加符号
    private final static String ADD_SYMBOL = "+";
    // 减符号
    private final static String SUB_SYMBOL = "-";
    // 执行
    public int exec(int a, int b, String symbol){
        int result = 0;
        if(symbol.equals(ADD_SYMBOL)){    // 比较
            result = this.add(a,b);
        }else if(symbol.equals(SUB_SYMBOL)){
            result = this.sub(a,b);
        }
    }
    // 加法
    public int add(int a, int b){
        return a + b;
    }
    // 减法
    public int sub(int a, int b){
        return a - b;
    }
}

书写场景类

public class Client{
    public static void main(String[] args){
        // 获取输入
        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);
        // 生成运算器
        Calculator calculator = new Calculator();
        calculator.exec(a,b);
    }
}

引入策略模式

即,将原先的加减法进行拆分
引入策略模式

protected interface Calculator{
    public int exec(int a, int b);
}

书写具体策略

public class Add implements Calculator{
    // 加法
    @Overrider
    public int exec(int a, int b){
        return a + b;    
    }
}

书写减法运算

public class Sub implements Calculator{
    // 减法
    public int exec(int a, int b){
        return a - b;
    }
}

why?为什么要进行封装,因为保证可以随时的增加具体的策略,所以需要一个上下文。

public class Context{
    private Calculator cal = null;
    // 通过构造函数注入
    public Context(Calculator _cal){
        this.cal = _cal;    // 完成指向
    }
    // 执行
    public int exec(int a, int b){
        return this.cal.exec(a,b);
    }
}

场景

public class Client{
    // 加
    public final static String ADD_SYMBOL = "+";
    // 减
    public final static String SUB_SYMBOL = "-";
    public static void main(String[] args){
        int a = Integer.parseInt(args[0]);
        String symbol = args[1];
        int b = Integer.parseInt(args[2]);
        // 初始化上下文
        Context context = null;
        // 选择策略
        if(symbol.equals(ADD_SYMBOL)){
            context = new Context(new Add());
        }else if(symbol.equals(SUB_SYMBOL)){
            context = new COntext(new SUb());
        }
        // 结果
        context.exec(a,b);
    }
}

使用枚举

public enum Calculator{
    // 枚举成员
    // 加法枚举
    ADD("+"){
        public int exec(int a, int b){
            return a + b;
        }
    }
    // 减法枚举
    SUB("-"){
        public int exec(int a, int b){
            return a - b;    
        }    
    }
    // 定义类型
    String value = "";
    // 构造
    private Calculator(String _value){
        this.value = _value;
    }
    // get
    public String getValue(){
        return this.value;
    }
    // 预留扩展
    public abstract int exec(int a. int b);
}

最后书写场景

public class Client{
    public static void main(String[] args){
        int a = Integer.parseInt(args[0]);
        String symbol = args[1];
        int b = Integer.parseInt(args[2]);
        Calculator.ADD.exec(a, b);
    }
}

总结

将原先耦合的if进行拆分成类,然后使用的时候注入类即可。或者使用枚举类型,如果需要增加,需要实现抽象方法。

应用

动画的实现,将各种缓动函数,书写为策略模式,然后使用的时候,将类注入即可。
表单校验,同样可以将各种校验进行解耦,使用的时候注入即可。

目录
相关文章
|
2月前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
51 4
|
4月前
|
设计模式 算法 测试技术
PHP中的设计模式:策略模式的应用与实践
在软件开发的浩瀚海洋中,设计模式如同灯塔,指引着开发者们避开重复造轮子的暗礁,驶向高效、可维护的代码彼岸。今天,我们将聚焦于PHP领域中的一种重要设计模式——策略模式,探讨其原理、应用及最佳实践,揭示如何通过策略模式赋予PHP应用灵活多变的业务逻辑处理能力,让代码之美在策略的变换中熠熠生辉。
|
1天前
|
设计模式 存储 缓存
前端必须掌握的设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,旨在将多分支复杂逻辑解耦。每个分支类只关心自身实现,无需处理策略切换。它避免了大量if-else或switch-case代码,符合开闭原则。常见应用场景包括表单验证、风格切换和缓存调度等。通过定义接口和上下文类,策略模式实现了灵活的逻辑分离与扩展。例如,在国际化需求中,可根据语言切换不同的词条包,使代码更加简洁优雅。总结来说,策略模式简化了多条件判断,提升了代码的可维护性和扩展性。
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
49 1
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
35 2
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
48 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
41 3
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
35 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
68 3
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
32 3