设计模式——策略模式

沙中世界 沙中世界     2022-08-23     794

关键词:

策略模式的重点并不是策略的实现,而是策略的管理的使用!

应用场景:当同一种职责,有不同的实现方式的时候可以使用策略管理;

角色:1、策略抽象类   2、策略的具体实现    3、策略环境(此类的作用在代码中有详细说明)

策略模式是典型的依赖接口编程的实现!

策略模式的优点是将算法的责任和实现分割开来,便于系统扩展;

缺点是客户端需要知道各个算法的优缺点,由客户端决定调用哪种算法;

下面看具体实现:

1、责任抽象

/*
 * Copyright (c) 2017. Xiaomi.Co.Ltd All rights reserved
 */

package com.pt.strategy;

import java.util.List;

/**
 * @description 职责的抽象
 * @author panteng
 * @date 17-2-27.
 */
public interface ISorting {
    void sort(List<Integer> list);
}
ISorting

2、策略具体实现

/*
 * Copyright (c) 2017. Xiaomi.Co.Ltd All rights reserved
 */

package com.pt.strategy;

import java.util.Collections;
import java.util.List;

/**
 * @description 职责实现策略的实体类
 * @author panteng
 * @date 17-2-27.
 */
public class SortStrategy1 implements ISorting {
    public void sort(List<Integer> list){
        System.out.println("===========方式1排序==========");
        Collections.sort(list);
    }
}
SortStrategy1
/*
 * Copyright (c) 2017. Xiaomi.Co.Ltd All rights reserved
 */

package com.pt.strategy;

import java.util.List;

/**
 * @description 职责实现策略的实体类
 * @author panteng
 * @date 17-2-27.
 */
public class SortStrategy2 implements ISorting {
    //插入排序
    public void sort(List<Integer> list){
        System.out.println("===========方式2排序==========");
        int i = 1;
        for (i = 1; i < list.size(); i++) {
            int key = list.get(i);
            int j = i;
            while (j > 0 && key < list.get(j - 1)) {
                list.set(j, list.get(j - 1));
                j--;
            }
            list.set(j, key);
        }
    }
}
SortStrategy2

3、策略环境(上下文)

此类除了代码中提到的必要之处,另外的作用在于当其中的某一种算法的入参和其他的不一致时,可以通过在context中增加成员变量,将该成员变量作为算法必须的参数使用,这样修改起来非常容易。比起使用重载或者是重写算法好很多。

 

或者是统计各种算法调用次数,此类也是必要的。

/*
 * Copyright (c) 2017. Xiaomi.Co.Ltd All rights reserved
 */

package com.pt.strategy;

import java.util.List;

/**
 * @description 策略的上下文环境,之所以由此上下文环境是为了便于做一些共性处理,比如对参数的校验,执行时间统计等;假如没有此上下文,需要在每一个策略类里面校验
 * @author panteng
 * @date 17-2-27.
 */
public class SortContext {
    ISorting sorting;
    public SortContext(){
    }
    public SortContext(ISorting sorting){
        this.sorting = sorting;
    }
    public ISorting getSorting(){
        return sorting;
    }
    public void setSorting(ISorting sorting){
        this.sorting = sorting;
    }

    public void Sort(List<Integer> list){
        sorting.sort(list);
    }
}
SortContext

4、测试

/*
 * Copyright (c) 2017. Xiaomi.Co.Ltd All rights reserved
 */

package com.pt.strategy;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @description
 * @author panteng
 * @date 17-2-27.
 */
public class StrategyTest {
    @Test
    public void strategyTest(){
        List<Integer> list = new ArrayList<Integer>();
        list.add(3);
        list.add(23);
        list.add(4);
        list.add(14);
        list.add(2);
        list.add(8);
        list.add(21);
        list.add(56);
        list.add(14);

        ISorting strategy1 = new SortStrategy1();
        ISorting strategy2 = new SortStrategy2();

        SortContext sortContext = new SortContext(strategy1);
        sortContext.Sort(list);
        System.out.println(list);

        /*SortContext sortContext = new SortContext();
        sortContext.setSorting(strategy2);
        sortContext.Sort(list);
        System.out.println(list);*/

    }
}
StrategyTest

 

 

===========================设计模式系列文章=========================

简单工厂模式

工厂方法模式

抽象工厂模式

建造者模式

原型模式

适配器模式

桥接模式

装饰模式

代理模式

组合模式

门面模式

享元模式

责任链模式

命令模式

中介者模式

备忘录模式

观察者模式

状态模式

策略模式

模板方法模式

访问者模式

java设计模式---策略模式(案例解析)

策略模式一、概念1、理解策略模式策略模式是一种行为型模式,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一... 查看详情

设计模式-策略模式

策略模式(strategypattern)策略模式(strategypattern):策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的... 查看详情

设计模式之策略模式

策略模式属于对象行为型的设计模式定义:封装了一些列算法,它们之前可以相互替换,此模式使得算法的改变,不会影响到使用它们的客户端  策略模式有以下3个角色组成抽象策略类:所有策略类的父类,为所支持的... 查看详情

设计模式中的多态——策略模式详解(代码片段)

目录1.关于策略模式2.策略模式详解2.1策略模式定义2.2策略模式的UML类图3.策略模式的优点3.1一个使用策略模式的例子3.2与其他实现方式的对比3.3使用策略模式的优点4.使用工厂方法模式改进原有策略模式5.总结5.参考资料1.关于策... 查看详情

设计模式——策略模式

一、策略模式案例一二、策略模式案例二:实现表单验证普通的表单验证功能实现:使用策略模式实现: 查看详情

设计模式——策略模式

一、策略模式案例一二、策略模式案例二:实现表单验证普通的表单验证功能实现:使用策略模式实现: 查看详情

设计模式——策略模式

一、策略模式案例一二、策略模式案例二:实现表单验证普通的表单验证功能实现:使用策略模式实现: 查看详情

设计模式——策略模式

策略模式的重点并不是策略的实现,而是策略的管理的使用!应用场景:当同一种职责,有不同的实现方式的时候可以使用策略管理;角色:1、策略抽象类  2、策略的具体实现   3、策略环境(此类的作用在代... 查看详情

设计模式笔记-策略模式(代码片段)

设计模式笔记-策略模式文章目录设计模式笔记-策略模式1.策略模式2.常见写法3.常见框架中的策略模式1.策略模式策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换,在使... 查看详情

设计模式(十四)——策略模式

设计模式(十四)——策略模式一、策略模式简介1、策略模式简介    策略模式定义了算法家族,分别封装起来,让不同算法之间可以互相替换,使算法的变化不会影响到使用算法的客户。    策略... 查看详情

设计模式笔记-策略模式(代码片段)

设计模式笔记-策略模式文章目录设计模式笔记-策略模式1.策略模式2.常见写法3.常见框架中的策略模式1.策略模式策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换,在使... 查看详情

设计模式--策略模式

策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式的优点有:策略模式提供了管理相关的算法族的办法、策略模式提供了可以... 查看详情

设计模式之-策略模式

1、策略模式定义:将一系列算法封装起来,为了以后可以互相替换使用,由策略类和context组成,context接受用户信息,然后将请求委托给策略类(现实生活中,我们要去一个城市,交通方式就有:飞机、高铁、开车、大巴等,这... 查看详情

设计模式(十七)---策略模式

1、简介  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。2、策略模式的结... 查看详情

设计模式——策略模式(代码片段)

设计模式(十二)——策略模式新专题:设计模式,我会在博客(http://www.hollischuang.com)及微信公众号(hollischuang)同步更新,欢迎共同学习。前几篇文章主要介绍了几种创建型模式,本文开始介绍行为型模式。首先介绍一个比较简... 查看详情

设计模式策略模式(简介|适用场景|优缺点|代码示例)(代码片段)

...略模式适用场景三、策略模式优缺点四、策略模式与其它设计模式五、策略模式代码示例1、促销策略接口2、满减促销策略3、返现促销策略4、空促销策略5、促销策略工厂6、促销活动7、测试类一、策略模式简介策略模式:定义了... 查看详情

设计模式之策略模式

...,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。介绍意图... 查看详情

设计模式之策略模式

1、定义  策略模式属于对象的行为模式。其用意是针对一组算法,将每一组算法封装到具有共同接口的独立子类中,从而可以使得他们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。2、策略模式... 查看详情