Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 347|回复: 0

[设计模式学习]策略模式简介

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-1 00:00:00 | 显示全部楼层 |阅读模式
    一、策略模式介绍
    策略模式(Strategy模式)是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。 策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
    一句话来形容:准备一组算法,并将每一个算法封装起来,使得他们可以互换

    二、策略模式的结构
    策略模式涉及到如下三个角色:
    环境角色:持有一个Strategy类(策略类)的引用
    抽象策略角色:策略类,通常由一个接口或者抽象类实现
    具体策略角色:包装了相关的算法和行为

    三、策略模式的优缺点
    3.1策略模式的优点
    提供了管理相关的算法族的办法。
    提供了可以替换继承关系的办法。
    避免使用多重条件转移语句

    3.2策略模式的缺点
    客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
    造成很多的策略类。 四、策略模式的应用举例

    在此使用了7个java类来描述说明Strategy设计模式;
    1、SortStrategy.java 排序算法策略接口
    2、SortBin.java 二分法排序
    3、SortBubble.java 冒泡排序
    4、SortHeap.java 堆排序
    5、SortQuick.java 快速排序
    6、Sorter.java 排序算法使用者
    7、SortTest.java 带有main方法的测试类
    1. 1、SortStrategy.java
    2. import java.util.List;
    3. public interface SortStrategy< T> {   
    4.   public void sort(List< T> list);
    5. }
    6. 2、SortBin.java
    7. import java.util.List;
    8. public class SortBin< T> implements SortStrategy< T> {
    9.   public void sort(List< T> list) {
    10.     // sorting logic code here
    11.     System.out.println("This is bin sort."); }
    12.   }
    13. 3、SortBubble.java
    14. import java.util.List;
    15. public class SortBubble< T> implements SortStrategy< T> {
    16.   public void sort(List< T> list) {
    17.     System.out.println("This is bubble sort.");
    18. }
    19. 4、SortHeap.java
    20. import java.util.List;
    21. public class SortHeap< T> implements SortStrategy< T> {
    22.   public void sort(List< T> list) {
    23.     // sorting logic code here
    24.     System.out.println("This is heap sort."); }
    25. 5、SortQuick.java
    26. import java.util.List;
    27. public class SortQuick< T> implements SortStrategy< T> {
    28.   public void sort(List< T> list) {
    29.     // sorting logic code here
    30.     System.out.println("This is quick sort."); }
    31. 6、Sorter.java
    32. import java.util.List;
    33. public class Sorter< T> {
    34.   private SortStrategy< T> strategy;
    35.   private Sorter(){}
    36.   //通过构造器传入排序策略
    37.   public Sorter(SortStrategy< T> strategy){
    38.     if(strategy == null )
    39.       strategy = new SortQuick< T>();  
    40.    this.strategy = strategy;   
    41. }  
    42.    
    43.   public void sort(List< T> list){
    44.     this.strategy.sort(list);
    45. }
    46. }
    47. 7、SortTest.java 测试类
    48. import java.util.ArrayList;
    49. import java.util.List;
    50. public class SortTest {
    51.   public static void main(String[] args) {
    52.     List< Integer> input = new ArrayList< Integer>();
    53.     input.add(8);
    54.     input.add(3);
    55.     input.add(5);
    56.     input.add(2);
    57.     input.add(1);
    58.     input.add(12);
    59.     input.add(9);
    60.    
    61.     Sorter< Integer> sorter = new Sorter< Integer>(new SortBin< Integer>());
    62.     sorter.sort(input);
    63.     sorter = new Sorter< Integer>(new SortBubble< Integer>());
    64.     sorter.sort(input);
    65.     sorter = new Sorter< Integer>(new SortHeap< Integer>());
    66.     sorter.sort(input);
    67.     sorter = new Sorter< Integer>(new SortQuick< Integer>());
    68.     sorter.sort(input);
    69.   }
    70. }
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 06:56 , Processed in 0.458696 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表