设计模式-策略模式

简介:

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

最直接加减法

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月前
|
设计模式 算法 测试技术
PHP中的设计模式:策略模式的应用与实践
在软件开发的浩瀚海洋中,设计模式如同灯塔,指引着开发者们避开重复造轮子的暗礁,驶向高效、可维护的代码彼岸。今天,我们将聚焦于PHP领域中的一种重要设计模式——策略模式,探讨其原理、应用及最佳实践,揭示如何通过策略模式赋予PHP应用灵活多变的业务逻辑处理能力,让代码之美在策略的变换中熠熠生辉。
|
20天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
27 3
|
21天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
26 2
|
22天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
57 3
|
23天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
27 3
|
22天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
24 1
|
23天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与应用
【10月更文挑战第8天】 在软件开发的浩瀚宇宙中,设计模式如同星辰指引,照亮了代码设计与架构的航道。本文旨在深入探索PHP语境下策略模式(Strategy Pattern)的精髓,不仅剖析其内核原理,还将其融入实战演练,让理论在实践中生根发芽。策略模式,作为解决“如何优雅地封装算法族”的答案,以其独特的灵活性与扩展性,赋予PHP应用以动态变换行为的能力,而无需牵动既有的类结构。
15 2
|
24天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
在PHP开发中,设计模式是提高代码可读性、可维护性和扩展性的重要工具。本文将深入探讨策略模式这一行为型设计模式,通过分析其定义、结构、使用场景以及在PHP中的实际应用,帮助开发者更好地理解和运用策略模式来优化自己的项目。不同于传统摘要的简洁概述,本文摘要部分将详细阐述策略模式的核心理念和在PHP中的实现方法,为读者提供清晰的指引。
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
策略模式是一种行为型设计模式,用于定义一系列算法,将每种算法都封装起来,并使它们可以互换。本文将探讨如何在PHP中实现策略模式,以及如何利用它来提高代码的灵活性和可维护性。通过具体示例,我们将看到策略模式在处理复杂业务逻辑时的优势,从而帮助开发者编写出更加清晰、易于扩展的代码。
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
在软件开发的广袤领域中,PHP以其灵活性和广泛的应用场景占据了一席之地。本文聚焦于PHP中的一个核心概念——设计模式,特别是策略模式。策略模式作为一种行为型设计模式,允许在运行时选择算法或操作的具体实现,为软件设计带来了极大的灵活性。本文将深入探讨策略模式的基本原理、应用场景以及在PHP中的具体实现方式,旨在帮助开发者更好地理解和运用这一设计模式,提升代码的可维护性和扩展性。
17 2

热门文章

最新文章