策略模式

设计模式之策略模式

牧云@^-^@ 提交于 2019-12-01 16:03:28
策略模式(Strategy):他定义了算法家族,分别封装起来,让它们之间可以互相转换,此模式让算法的变化,不会影响到使用算法的客户。 package com.hztz.project.strategy;/** * @author huang * @date 2019/10/17 */abstract class Strategy { /** * 算法方法 */ public abstract void AlgorithmInterface();static class ConcreteStrategyA extends Strategy{ /** * 算法A的实现 */ @Override public void AlgorithmInterface() { System.out.println("算法A的实现"); }}static class ConcreteStrategyB extends Strategy{ /** * 算法B的实现 */ @Override public void AlgorithmInterface() { System.out.println("算法B的实现"); }}static class ConcreteStrategyC extends Strategy{ /** * 算法C的实现 */ @Override public void

2019.10.17 MVC

时间秒杀一切 提交于 2019-12-01 16:01:47
MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性、可移植性,代码的可重用性。 MVC即Model、View、Controller即模型、视图、控制器。我在和同行讨论技术,阅读别人的代码时发现,很多程序员倾向于将软件的业务逻辑放在Controller里,将数据库访问操作的代码放在Model里。 最终软件(网站)的代码结构是,View层是界面,Controller层是业务逻辑,Model层是数据库访问。 不知道大家知不知道另外一种软件开发模式三层架构,它和MVC相似之处是也分为三层,分别是UI层表示用户界面,BLL层表示业务逻辑,DAL层表示数据访问。三层架构曾经红极一时,MVC大行其道之后它就销声匿迹了, 可现在看来, 它似乎只是改头换面, 装扮成MVC的样子,并且深受程序员们的欢迎,因为它的这种分层方式和前文描述的MVC如出一辙。 再说的直白点,很多程序员将MVC当成了三层架构在用,这看起来似乎没什么问题,毕竟三层架构也是一种和MVC齐名的架构模式。可问题在于用三成架构的思路写MVC,那么写出来的东西既不是三成架构也不是MVC,到是像一个什么都不是四不像。熟悉天龙八部的同学应该知道这样一段情节

设计模式之美—策略模式

人走茶凉 提交于 2019-12-01 12:47:25
策略模式 什么是策略模式    策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化 策略模式是对算法的包装,是把使用算法的责任和算法本身分开。策略模式通常是把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。 例如下象棋时,炮的前进策略和马、兵的策略是不一样的,算法是有区别的。 我们开始实战,为了说明问题,我们以上图为例做一个超级简单的象棋(简单到没法玩象棋,嘿嘿), 假设 现在象棋只有炮、兵、将,代码如下。 1 public class Chess { 2 3 /** 4 * 兵前进算法 5 * @param a 原位 6 * @param b 目标为 7 */ 8 public void soldierGoAhead(int a, int b){ 9 System.out.println("兵"+a+"进"+b); 10 } 11 12 /** 13 * 炮前进算法 14 * @param a 原位 15 * @param b 目标为 16 */ 17 public void gunGoAhead(int a, int b){ 18 System.out.println("炮"+a+"进"+b); 19 } 20 } 这样写可以吗?如果随着我们的算法不断增加

设计模式-策略模式

筅森魡賤 提交于 2019-12-01 08:59:23
策略模式 策略模式用于解决判断分支过多的问题,使代码变得简洁和优雅, 策略模式在多种方式在项目中落地,下面举例说明通过指定不同类型的订单使用策略模式执行不同的业务逻辑 文章参考自公众号:石杉的架构笔记 一.项目结构 二.各个类的说明    1.自定义注解   //通过注解中的value值来表示不同的分支,从而执行不同的业务逻辑 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface HandlerType { String value(); }    2.处理器相关     -抽象处理器-定义子处理器要实现的行为 public abstract class AbstractHandler { public abstract String handle(OrderDTO dto); }     -子处理器1-实现抽相关处理器的行为1 @HandlerType(value = "1") @Component public class NomalHandler extends AbstractHandler{ @Override public String handle(OrderDTO dto) { return "normal";

策略模式(行为型模式)

*爱你&永不变心* 提交于 2019-12-01 08:25:24
在策略模式中,一个类的行为或其算法可以在运行时更改。 主要解决:在有多种算法相似的情况下,使用if else所带来的复杂和难以维护 如何解决:将这些算法封装成一个一个的类,任意地替换。 关键代码:实现同一个接口。 优点: 1、算法可以自由切换 2、避免使用多重条件判断 3、扩展性良好 缺点: 1、策略类会增多 2、所有策略类都需要对外暴露 使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、很多的if else情况。 3、一个系统需要动态地在几种算法中选择一种。 来源: https://www.cnblogs.com/Aug-20/p/11672916.html

设计模式学习之策略模式

痞子三分冷 提交于 2019-12-01 04:49:35
策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(Policy Pattern)。 其定义如下 Define a family of algorithms,encapsulate each one, and make them interchangeable(定义一组算法将每个算法都封装起来,并且使它们之间可以互换) 策略模式UML类图 这个模式涉及到三个角色:   ●   环境(Context)角色: 持有一个Strategy的引用。   ●   抽象策略(Strategy)角色: 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。   ●   具体策略(ConcreteStrategy)角色: 包装了相关的算法或行为。 源代码  环境角色类 public class Context { //持有一个具体策略的对象 private Strategy strategy; /** * 构造函数,传入一个具体策略对象 * @param strategy 具体策略对象 */ public Context(Strategy strategy){ this.strategy = strategy; } /** * 策略方法 */ public void contextInterface(){ strategy

“策略模式”原来如此简单

隐身守侯 提交于 2019-12-01 04:33:25
一、策略模式简介 1、定义 策略模式(Strategy): 将一组算法封装起来,使其可以相互替换;同时算法的变化不会影响客户的使用 2、使用场景 可以用它来封装 几乎任何类型的规则 , 只要在分析过程中听到需要在不同条件下应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性 3、优缺点 优点: 算法可以自由切换 避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护) 扩展性良好,增加一个策略只需实现接口即可 缺点: 策略类数量会增多,每个策略都是一个类,复用的可能性很小 所有的策略类都需要对外暴露 3、UML类图 ​ 二、策略模式实现 1、策略角色  抽象策略角色,是对策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。algorithm是“运算法则”的意思。 package com.mfc.design.策略模式; /** * @author MouFangCai * @date 2019/10/11 11:28 */ public abstract class Strategy { // 算法方法 public abstract void algorithmInterface(); } 2、具体策略角色 用于实现抽象策略中的操作,即实现具体的算法,下方用print代替。测试类共3个ConcreteStrategy

路由策略

≯℡__Kan透↙ 提交于 2019-11-30 11:05:49
路由策略:操作对象是路由信息,主要用于两个方面:(1)对路由信息进行过滤。(2)修改路由属性 什么是路由策略 路由策略不是一个特定的技术,也不是一个特定的特性 PBR:操作对象是数据包,策略路由是通过用户制定的策略进行转发,且该策略优于路由表的转发。(在路由表已经产生的情况下,不按照路由表进行转发,而是根据需要,依照某种策略改变数据包转发路径 路由策略包括:1.router-policy 的组成 首先通过ACL或者IP-Prefix 工具来匹配流量目标流量  l 节点号 一个Route-Policy可以由多个节点(node)构成。路由匹配Route-Policy时遵循以下两个规则: 1)顺序匹配:在匹配过程中,系统按节点号从小到大的顺序依次检查各个表项,因此在指定节点号时,要注意符合期望的匹配顺序。 2)唯一匹配: Route-Policy各节点号之间是“或”的关系 ,只要通过一个节点的匹配,就认为通过该过滤器,不再进行其它节点的匹配。 l 匹配模式 节点的匹配模式有两种:permit和deny。 1)permit指定节点的匹配模式为允许。当路由项通过该节点的过滤后,将执行该节点的apply子句,不进入下一个节点;如果路由项没有通过该节点过滤,将进入下一个节点继续匹配。 2)deny指定节点的匹配模式为拒绝。这时apply子句不会被执行。当路由项满足该节点的所有if

九、Java设计模式之策略模式

岁酱吖の 提交于 2019-11-30 08:37:10
定义: 定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户 if ..... else替换 系统有很多类,而他们的区别仅仅在于他们的行为 一个系统需要动态地在几种算法中选择一种 优点: 开闭原则 避免使用多重条件转移语句 提高算法的保密性和安全性 缺点: 客户端必须知道所有策略类,并自行决定使用哪一个策略类 产生很多策略类 策略模式-相关设计模式 策略模式和工厂模式 策略模式和状态模式 来源: https://my.oschina.net/u/3915790/blog/3109968

Flink cep的初步使用

☆樱花仙子☆ 提交于 2019-11-30 07:01:36
一、CEP是什么 在应用系统中,总会发生这样或那样的事件,有些事件是用户触发的,有些事件是系统触发的,有些可能是第三方触发的,但它们都可以被看做系统中可观察的状态改变,例如用户登陆应用失败、用户下了一笔订单或RFID传感器回报的消息。应对状态改变的策略可以分为两类,一类是简单事件处理(Simple event processing),一般简单事件处理会有两个步骤,过滤和路由,决定是否要处理,由谁处理,另一类是复杂事件处理(Complex event processing),复杂事件处理本身也会处理单一的事件,但其典型特质是需要对多个事件组成的是事件流进行检测分析并响应。 在维基百科中也对CEP做了定义,“CEP是一种事件处理模式,它从若干源中获取事件,并侦测复杂环境的事件或模式,CEP的目的是确认一些有意义的事件(比如某种威胁或某种机会),并尽快对其作出响应”,可见CEP的主要特点包括:复杂性,需要在多源的事件流中进行检测;低延迟,秒级或毫秒级的响应,比如应对威胁;高吞吐,需要迅速对大量或者超大量事件流作出响应。 以往的CEP框架往往处理大量收集到的事件,不能处理正在收集的事件,这时,Flink来了。 二、Flink CEP Flink作为目前大数据领域实时计算的主流计算框架,天然支持低延迟、高吞吐等特性,再加上Flink中的窗口模型和状态模型,更是对CEP提供了非常强大的支撑