一天学一个模式_第一天:策略模式

概念:
  策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
     (原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.)

抽象策略角色:
       策略类,通常由一个接口或者抽象类实现。

步骤:
     (①②步比较菜,忽略。有异议者联系!)
      ①首先定义一个策略接口
      ②然后再写出你需要的实现类(这里称为“计谋”)去继承①策略接口。
      ③计谋有了,那还要有锦囊装

       /**
        * @author wonter 
        * <b>描述:</b>计谋有了,那还要有锦囊装 <br>
        * <b>邮件:</b> yiyu1@163.com <br>
        */
       public class Box {
     //①策略接口
     private IStrategy straegy;
     //向锦囊中传入计谋
     //这里类型是策略IStrategy接口,但传入的则是“实现”接口的计谋。
     public Box(IStrategy jimou){
     //改写策略
          this.straegy = jimou;
      }
     //使用计谋
     public void operate(){
          this.straegy.operate();
      }
       }

          ④使用计谋

   /**
    * @author wonter 
    * <b>描述:</b>计谋有了,那还要有锦囊装 <br>
    * <b>邮件:</b> yiyu1@163.com <br>
    */
      public class YunZhao {
    public static void main(String[] args) {
     //将锦囊声明出来
     Context context;
     System.out.println("—— 锦囊妙计一 ——");
     //向锦囊拿出**计谋
     context = new Context(new first());
      //执行计谋
     context.operate(); 
     System.out.println("—— 锦囊妙计二 ——");
     //向锦囊拿出**计谋
     context = new Context(new second());
      //执行计谋
     context.operate(); 
     System.out.println("—— 以下待为扩展 ——");
     System.out.println("——        ... ....       ——");
      }
好处:
       这就是策略模式,高内聚低耦合的特点也表现出来了。
       还有一个就是扩展性,也就是 OCP原则,只要修改 Context.java 就可以了。
       提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
       避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
 /**
    * @author wonter 
    * <b>描述:</b> 一天学一个模式 更新中,请关注我的博客! <br>

    * <b>博客:</b> http://www.cnblogs.com/Javame <br>
    * <b>邮件:</b> yiyu1@163.com <br>
    */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python标准库怎么用_Python常用标准库使用(一)

自学python一段时间&#xff0c;之前总是学习基本语法&#xff0c;对Python标准库没怎么接触&#xff0c;所以计划从常用的标准库开始&#xff0c;大体了解一遍&#xff0c;下面是学习过程中的笔记。一、OS模块主要对目录、或者文件操作。常用方法如下&#xff1a;os.listdir(p…

英伟达|jetson nano开发使用的基础详细分享

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;最近我朋友写了一篇英伟达开发板的文章&#xff0c;分享给大家。前言&#xff1a;最近拿到一块jetson nano 2GB版本的板子&#xff0c;折腾了一下&#xff0c;从烧录镜像、修改配件等&#xff0c;准备一篇开箱基础文章给大家…

埃及乘法

乘法可以看成n个a相加&#xff0c;那么所需要的时间为O(n)&#xff0c;那么如何降低乘法的时间呢&#xff08;降低为logn)&#xff1f; 埃及乘法算法就是一种&#xff0c;分为奇数和偶数&#xff0c;&#xff08;例如计算n*a)偶数从1开始是a,然后1✖2&#xff0c;aa以此类推&am…

排序算法之快速排序(Java)

快速排序 平均时间复杂度 O(NlogN) 最差时间复杂度O(N*N) 不稳定 它的基本思想是&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序…

shell 自动输入密码

原文地址&#xff1a;http://biancheng.dnbcw.info/linux/297018.html 在shell脚本中需要用root用的来执行指令&#xff1a; sudo 自动输入密码echo "password" | sudo -S netstat -tlnp-S The -S (stdin) option causes sudo to read the password from th…

和PP在腾讯

昨天晚上十点&#xff0c;我在会议室搞项目&#xff0c;PP发消息给我说 「你什么时候下班&#xff0c;等我一下&#xff0c;我下去见见你再走」。我说「你赶紧下来&#xff0c;我熬不住了」。因为确实比较晚&#xff0c;然后自己手上开发的事情也还没完成&#xff0c;有时还会冒…

python求回数_用python求回数

今天学到filter函数&#xff0c;做一道练习题&#xff0c;求回数的&#xff0c;我前前后后差不多用了半个小时才把它弄出来&#xff0c;先是有思路了然后写出来后一直报错&#xff0c;又改改换换&#xff0c;最后其实是某个小问题导致的&#xff0c;每次查这种小问题时都先怀疑…

第二章 寄存器

CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。寄存器包括&#xff1a;AX、BX、CX、DX、SI、DI、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 2.1 通用寄存器 8086CPU的所有寄存器都是16位的&#x…

排序算法之选择法排序(Java)

选择排序 时间复杂度 O(n*n) 不稳定的排序算法 思想是&#xff1a;每一趟从待排序的数据元素中选出最小的一个元素&#xff0c;顺序放在已排好序的数列的最后&#xff0c;直到全部待排序的数据元素排完。 下面是关键部分代码&#xff1a; public static void select_so…

周末生活日记|我们和楠哥

这周是双休&#xff0c;早上跟楠哥一起睡了一个大懒觉。早上11点起来&#xff0c;不过小米音箱在9点的时候就在客厅响音乐&#xff0c;我大叫一声「小爱同学&#xff0c;停止播放」&#xff0c;然后继续蒙头大睡。11点起来&#xff0c;哦&#xff0c;在我们家我还算起的早的&am…

lnmp基于fastcgi实现nginx_php_mysql的分离_LNMP基于FastCGI实现Nginx,PHP,MySQL的分离

LNMP基于FastCGI实现Nginx,PHP,MySQL的分离[日期&#xff1a;2012-11-12]来源&#xff1a;Linux社区作者&#xff1a;laoguang[字体&#xff1a;大 中 小]平时安装LNMP是把它们安装到同一台机器上&#xff0c;我想这个对大家来说丝毫没有挑战&#xff0c;下面我们实现把他们剥离…

green ethernet

green ethernet 今天老大让我测试交换机那个green ethernet 功能&#xff0c;我当时还纳闷&#xff0c;没听说这个概念&#xff0c;上网查了一下&#xff0c;原来是节能的一个功能。其主要作用有两个&#xff1a; 1,绿色节能交换机将自动侦测端口状态&#xff0c;如果某端口呈…

学习笔记=《你不知道的JavaScript(上卷)》第三章:函数作用域和块级作用域...

3.1 函数中的作用域 &#xff08;1&#xff09;JavaScript具有基于函数的作用域&#xff0c;每声明一个函数的时候会为其自身创建一个‘气泡’&#xff0c;这个气泡内声明的变量或函数外界无法访问。 函数作用域的含义是指&#xff0c;属于这个函数的全部变量都可以在整个函数范…

使用python game写一个贪吃蛇游戏

前言 最近在用python 做项目&#xff0c;也想对python有多一些了解&#xff0c;之前有用C语言和C写过python游戏&#xff0c;刚好可以通过这个游戏来对python多一些了解。 文章内容翻译自以下链接 https://www.edureka.co/blog/snake-game-with-pygame/ pygame 介绍 pygame是…

艾伟也谈项目管理,我是如何带领团队开发项目的

最近有不少朋友写信问我一些关于团队开发的问题,由于这段时间有些忙,没有回复.今天写一篇这方面的文章向大家介绍一下我是如何带领团队开发工作流项目的 关于团队建设,项目管理的文章网上已经有很多了,在这里我就不谈这些理论了,直接给大家展示一个我在 项目开发方,后台服务开…

mysql 动态索引_MySQL的索引

在日常工作中&#xff0c;我们经常会用到mysql的索引。使用索引的目的基本上就是为了在大量的数据中快速找出某个列中一个特定值的行&#xff0c;简单说就是提高查询效率。使用索引的优点&#xff1a;可以快速检索&#xff0c;减少I/O次数&#xff0c;加快检索速度&#xff1b;…

排序算法之简单插入法排序(Java)

简单插入排序 时间复杂度 O(n*n) 稳定的排序算法逐一取出元素&#xff0c;在已排好的元素序列中从后向前扫描&#xff0c;插入到适当的位置 部分代码如下&#xff1a; public static void insert_sort(int[] data){int i 0;int j 0;int len 0;int tmp 0; //局部变量if…

牛客提高R5 A.同余方程

题意 题目链接 Sol 设\(solve(x, y)\)表示\(i \in [0, x], j \in [0, y]\)满足题目要求的方案数 首先容斥一下&#xff0c;\(ans solve(r_1, r_2) - solve(l_1 - 1, r_2) - solve(l_2 - 1, r_1) solve(l_1 -1, l_2 - 1)\) 然后按照套路按位拆分&#xff0c;这里拆的时候是直接…

移植U-Boot思路和实践 | 基于RK3399

0. 背景介绍我们手里这块RK3399开发板出厂时带的是2017.09版本的U-Boot。U-Boot 2017.09 (Sep 26 2021 - 08:53:15 0000)Model: Forlinx OK3399 Evaluation Board PreSerial: 2 DRAM: 2 GiB Sysmem: init Relocation Offset is: 7dbe9000 Using default environment在这个基础…

mysql 查询 集合_MySQL使用集合函数进行查询操作实例详解

本文实例讲述了MySQL使用集合函数进行查询操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;COUNT函数SELECT COUNT(*) AS cust_num from customers;SELECT COUNT(c_email) AS email_num FROM customers;SELECT o_num, COUNT(f_id) FROM orderitems GROUP BY o_num;…