策略模式

北风设计模式课程---模板方法模式与策略模式的区别

我的未来我决定 提交于 2020-01-13 00:30:39
北风设计模式课程---模板方法模式与策略模式的区别 一、总结 一句话总结: 整体替换 >< 特定点替换:策略模式更注重于: 一个“策略”是一个 整体的(完整的) 算法,算法是可以被整体替换的。而模板方法只能被替换其中的特定点,算法流程是固定不可变的。 1、模板方法模式与策略模式的思想的区别? 模板方法模式:算法流程固定,节点替换:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。 策略模式:整体替换:使不同的算法可以被相互替换,而不影响客户端的使用。 二、模板方法模式与策略模式的区别 转自或参考:模板方法模式与策略模式的区别 https://blog.csdn.net/hudashi/article/details/50978969 原文: http://www.tuicool.com/articles/6JBN7z3 如果你还不了解 模板方法模式 和 策略模式 ,请先阅读《 策略模式(strategy) 》和《 模板方法模式 》 模板方法模式 的主要思想:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。 策略模式的主要思想 :使不同的算法可以被相互替换,而不影响客户端的使用。 在思想和意图上看

设计模式之行为型模式(四)

风格不统一 提交于 2020-01-12 23:38:30
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式是 GoF 设计模式 中最为庞大的一类,它包含以下 11 种模式。 模板方法(Template Method)模式:定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。 命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。 职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。 状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。 观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象

策略模式vs工厂模式的区别

帅比萌擦擦* 提交于 2020-01-12 16:00:26
定义: 工厂模式的思想主要为:多个类似的子类继承同一个父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 1. 相似: 在模式结构上,两者很相似; 2.差别: 用途不一样 工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; 关注点不一样 一个关注对象创建 一个关注行为的封装 解决不同的问题 工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。 策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。 工厂相当于黑盒子,策略相当于白盒子; 策略模式例子 例1、 (1)策略模式的核心就是对算法变化的封装。 定义一个通用算法协议,让每个算法遵守其规则。 @protocol LHPlayerProtocol <NSObject> /** * Player开启视频

策略模式和工厂模式的区别

亡梦爱人 提交于 2020-01-12 06:54:41
转载至 http://www.cnblogs.com/me115/p/3790615.html 工厂模式和策略模式看着很像,经常让人混淆不清; 它们的区别在哪里,需要细细体味; 相似点 在模式结构上,两者很相似; 差异 用途不一样 工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; 关注点不一样 一个关注对象创建 一个关注行为的封装 解决不同的问题 工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。 策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。 工厂相当于黑盒子,策略相当于白盒子; 举例说明 工厂模式 有一天你决定去吃培根披萨,首先得选择店铺,A店和B店都有培根披萨; 你点了A店的培根披萨,过了二十分钟,你的披萨就来了就可以吃到了。但这个披萨是怎么做的,到底面粉放了多少,培根放了多少,佐料放了多少,有多少道工序,你是不需要管的,你需要的是一个美味培根披萨。 策略模式 在披萨店,你要一个培根披萨,老板说有标准的pizza,也可以自己去做。原料有培根、面粉、佐料。工序有1、2、3工序

工厂模式和策略模式区别

旧城冷巷雨未停 提交于 2020-01-11 08:29:20
先上代码: 定义一个抽象类 //抽象类 abstract class AbsClass { //抽象方法:提供一些列的算法操作 public abstract void acceptCash(string org); } //继承自抽象类 class A:AbsClass { //具体方法:提供一些列的算法操作 public override double acceptCash(string org) { Console.WriterLine("A类方法"); } } //继承自抽象类 class B:AbsClass { //具体方法:提供一些列的算法操作 public override double acceptCash(string org) { Console.WriterLine("B类方法"); } } 简单工厂模式: //现金收取工厂 class CashFactory { //根据条件返回相应的对象 public static AbsClass createCashAccept(string type) { AbsClass cs = null; switch (type) { case "A": cs = new Al(); break; case "B": cs = new B(); break; case "...": ........ .... break;

设计模式

一曲冷凌霜 提交于 2020-01-10 11:28:17
1.设计模式主要解决问题 a.代码的扩展性,2.代码的冗余性 2.策略模式 解决多重if判断问题 设计思路:创建一个接口---创建多个子类实现---把子类的beanID记录在数据库表里---查询表获取相应的beanID ---创建接口类型对象,通过sprig根据查询到的ID获取实现对象,并赋值给接口对象。 根据实现情况,可把beanID的信息放在缓存里 来源: CSDN 作者: hqlai1234 链接: https://blog.csdn.net/hqlai1234/article/details/103919521

设计模式 行为型---策略模式

帅比萌擦擦* 提交于 2020-01-07 01:11:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、策略模式基本介绍 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户; 这算法体现了几个设计原则。第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程,而不是具体类(定义策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)。 二、策略模式各组成部分 三、策略模式和状态模式的区别 状态模式 策略模式 状态模式的类图和策略模式类似,并且都是能够动态改变对象的行为。 但是状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。 状态模式:状态模式需要在 执行某一动作 中,将自身的状态属性更改为另一状态; 策略模式:策略模式是对 一系列策略的组合 ,通过不同的策略组合聚合成为不同的Context对象; 四、策略模式的注意事项和细节 策略模式的关键是:分析项目中的变化部分和不变部分; 策略模式的核心思想是:多用组合聚合,少用继承;用行为类,而不是行为的继承,更有弹性; 体现了“对修改关闭,对扩展开放”的原则,客户端增加行为不用修改原有代码,只要添加一种策略(或者行为)即可,避免使用多重转移语句(if..

《Linux就该这么学》培训笔记_ch08_iptables与firewall防火墙

这一生的挚爱 提交于 2020-01-04 01:58:16
《Linux就该这么学》培训笔记_ch08_iptables与firewall防火墙 文章最后会post上书本的笔记照片。 文章主要内容 : 防火墙管理工具 iptables firewalld 服务的访问控制列表 书本笔记 防火墙管理工具 防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。 防火墙策略可以 基于流量的源目地址、端口号、协议、应用 等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。 在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,只需要配置妥当其中的一个就足够。 iptables与firewalld只是用来定义防火墙策略的防火墙管理工具,并不是真正的防火墙。或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。 iptables 在早期的Linux系统中(RHEL7之前),默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的firewalld防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用iptables

java设计模式----策略(1)

谁说我不能喝 提交于 2020-01-02 14:36:28
前景提要; 不多逼逼 项目演示地址 需求 如下图 已普通策略方式的实现 定义一个接口 多种实现 public interface Pay { String call(); } @Component public class AliPay implements Pay { @Override public String call() { System.out.println("调用支付宝"); return "ali"; } } @Component public class UnionPay implements Pay { @Override public String call() { System.out.println("调用银联"); return "union"; } } @Component public class WxPay implements Pay { @Override public String call() { System.out.println("调用微信"); return "wx"; } } 写个demo测试 @RestController public class DemoController { @PostMapping(value = "/strategy/normal/pay") public String pay(

Rxjava2(二)、五种观察者模式创建及背压

六月ゝ 毕业季﹏ 提交于 2019-12-31 12:16:08
Android进阶系列之第三方库知识点整理。 知识点总结,整理也是学习的过程,如有错误,欢迎批评指出。 上一篇: Rxjava2(一)、基础概念及使用 直接开整,上一篇基础概念里面说了, rxjava2 扩展于观察者模式,我们上篇的只是简单的介绍了用 Observable 来创建使用,其实 rxjava2 给我们提供了五种观察者模式的创建方式。 1、Observable 和 Observer 能够发射0或n个数据,并以成功或错误事件终止,在第一篇中已经举例说明了,这里就不再详细说明。 2、Flowable 和 Subscriber 能够发射0或n个数据,并以成功或错误事件终止。 支持 背压 ,可以控制数据源发射的速度。 我们看到 Observable 和 Flowable 这两个的区别就是后者支持背压,那么何为背压? 2.1、什么是背压 背压是一种现象,简单来说就是在 异步操作 中,上游发送数据速度快于下游处理数据的速度,下游来不及处理, Buffer 溢出 ,导致事件阻塞,从而引起的各种问题,比如事件丢失,OOM等。 在 rxjava1 中并不支持背压,当出现事件阻塞时候,会直接抛出 MissingBackpressureException 异常,但是在 rxjava2 中,提供了 Flowable 来创建被观察者,通过 Flowable 来处理背压问题