[设计模式] ------ 策略模式

策略模式

它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户

其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已。
比如定义一个接口A,下面有个方法叫a
类B1实现了这个方法,当然也要实现a方法,假如B1的a方法中打印了b1b1b1
类B2实现了这个方法,当然也要实现a方法,假如B2的a方法中打印了b2b2b2
类B3实现了这个方法,当然也要实现a方法,假如B3的a方法中打印了b3b3b3

这就好了,效果如下:
如果A b1 = new B1();那么b1.a();就会打印出b1b1b1
如果A b2 = new B2();那么b2.a();就会打印出b2b2b2
如果A b3 = new B3();那么b3.a();就会打印出b3b3b3

相同的接口,通过定义不同的实现类,就能实现不同的功能,我们叫这些不同的类为一个个的策略。
事先定义好不同的策略,在用的时候也会游刃有余。

举个实际的例子:
比如logback这个日志框架,里面有rollingPolicy标签基本作用就是分割文件,他就可以设置不同的class作为不同的策略,有的策略是按时间分割,有的策略是按文件大小分割,还有其他等等策略。

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">***</rollingPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">***</rollingPolicy>

一般策略模式还会和工厂模式一起用,比如上面例子中的B1,B2,B3一般都用工厂模式创建出来,统一管理

实战:

[设计模式] — 策略模式实战:java中替代if-else的大段逻辑

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

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

相关文章

OC语法简化

很多刚从其他编程语言转到Objective-C的同学看到长长的函数名会感到崩溃&#xff0c;这种语法让消息的传递像一个英语句子&#xff0c;大大增强了可读性。比如你想初始化一个浮点数&#xff0c;需要这么写&#xff1a; NSNumber value [NSNumber numberWithFloat:123.45f];从这…

[设计模式] ------ 简单工厂模式

简单工厂模式 不同类型下创建对应的不同的对象&#xff0c;得到不同的结果&#xff0c;就叫简单生产模式 比如 定义一个接口&#xff0c;叫A&#xff0c;里面有方法a&#xff0c;返回int类型 类B1实现A接口&#xff0c;也实现a方法&#xff0c;里面做的是加法运算 类B2实现…

Podfile语法

一、Podfile Podfile文件详细描述了一个或多个工程中targets的依赖关系。Podfile会默认创建一个隐式的目标链接到工程中用户的第一个target&#xff0c;名称为“default”。 一个Podfile可以非常简单: pod AFNetworking, ~> 1.0 也可以配置的复杂一点,如下: source https:/…

[设计模式] ------ 模板模式

模板模式 模板模式&#xff0c;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构&#xff0c;就可以重定义该算法的某些特定步骤 一般是定义一个抽象类&#xff0c;有抽象方法&#xff0c;有骨架方法&a…

获取本地沙盒文件的MIMEType

通过发送一个基于本地文件的URL请求&#xff0c;从响应对象中获取MIMEType值。代码如下&#xff1a;NSString *path [[NSBundle mainBundle] pathForResource:"测试文件"ofType:"pdf"]; //创建本地文件URL NSURL *url [NSURL fileURLWithPath:path]; //创…

第19章总结

一.Java绘图类 1.Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图像上进行绘制。Graphics类封装了Java支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色、字体、画笔、文本、图像等。 2.Graphics2D类 Graphics2…

如何写一个数据库中间件以及需要准备的知识储备

什么是数据库中间件 1.透明化使用方无感知&#xff0c;或者尽量少感知。通过现有的接入端接入已有服务 2.增量服务不改变数据库本身功能的前提下&#xff0c;提供额外的功能与服务一个原则不破坏原有逻辑&#xff0c;并且让用户基于之前的经验可以快速上手接入端协议的选择 1.…

HTTP断点续传

一、概述所谓断点续传&#xff0c;其实只是指下载&#xff0c;也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的&#xff0c;HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传&#xff0c;需…

RSA公钥文件(PEM)解析

公钥语法为&#xff1a; RSAPublicKey :: SEQUENCE { modulus INTEGER, //RSA合数模n publicExponent INTEGER //RSA公开幂e } 说明&#xff1a; 1.此语法中的modulus和publicExponent&#xff0c;提取自对应私钥中的同名域值。 2.PKCS1和PKCS8的公钥文件是一样的&#xff…

[spring boot] ------ 总结1

spring boot 设计目的&#xff1a;简化spring应用的初始搭建以及开发过程 spring环境的微服务&#xff1a;对原有技术的封装&#xff08;spring springMVC&#xff09; 简化开发&#xff0c;提高开发效率&#xff08;原ssm--->spring boot mybatis&#xff09; 自动配置&…

RSA私钥文件(PEM-PKCS#1)解析

在PKCS#1 RSA算法标准中定义RSA私钥语法 RSAPrivateKey :: SEQUENCE { version Version, //版本 modulus INTEGER, // RSA合数模 n publicExponent INTEGER, //RSA公开幂 e privateExponent INTEGER, //RSA私有幂 d prime1 INTEGER, //n的素数因子p prime2 INTEGER, //n的…

Spring的@Configuration使用cglib代理的效果和我自己写的简单实现

下面的代码&#xff0c;照着复制就能跑起来 今天看了下Spring的Configuration&#xff0c;即java类配置bean,&#xff08;这个spring3的新功能&#xff0c;虽然现在已经spring5了&#xff0c;但是这种配置bean的方式也是比较火的&#xff09; 做了如下测试&#xff0c;发现一个…

Xcode中StaticLibrary和Framework的共同点和区别

一、共同点&#xff1a;两者其实都是静态库。二、区别1.承载的内容范畴&#xff1a;(1)StaticLibrary的产出物只是一个.a文件&#xff0c;为二进制执行文件。分享给别人的时候&#xff0c;头文件、静态资源文件需要另外提供。(2)Framework为一站式分享方案&#xff0c;其实是一…

[分布式] ------ 全局唯一id生成之雪花算法(Twitter_Snowflake)

雪花算法&#xff08;Twitter_Snowflake&#xff09; 我们知道&#xff0c;分布式全局唯一id的生成&#xff0c;一般是以下几种&#xff1a; 基于雪花算法生成基于数据库基于redis基于zookeeper 本文说下雪花算法&#xff0c;后面附源码以及测试代码。 如下图&#xff1a; …

非对称加解密交互故事

1.鲍勃有两把钥匙&#xff0c;一把是公钥&#xff0c;另一把是私钥。 2.鲍勃把公钥送给他的朋友们—-帕蒂、道格、苏珊—-每人一把。 3.苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密&#xff0c;就可以达到保密的效果 4.鲍勃收信后&#xff0c;用私钥解密&#xff0…

2019年规划

2019年规划&#xff0c;到2019-12-31检查&#xff1a; 1.至少读5本与工作无关的书&#xff08;平均两个月1本&#xff09;&#xff0c;每本都产出读后感 1.1 《重构 改善代码既有设计》&#xff0c;2月19日~3月5日&#xff0c;刚好两周读完&#xff0c;产出两篇总结&#xff0…

RSA私钥文件(PEM-PKCS#8)解析

***此文仅针对没有执行加密的PKCS#8私钥文件***一、实例解析PKCS#8格式使用的是ASN.1结构&#xff0c;首先我们对一个没有执行加密的PKCS#8格式私钥文件进行一下解析&#xff0c;方便我们下面分析其结构。命令&#xff1a;openssl asn1parse -i -in privatekey.pem结果如下&…

分布式和集群的区别

分布式和集群的区别 分布式是多个不同功能的机器共同完成一件事情 集群是多个相同功能的机器完成的是相同的事情 分布式是为了分担压力 集群是为了稳定性和高可用 举个例子&#xff1a; 一个厨师开了一个饭店&#xff0c;他要负责做饭和卖饭&#xff0c;他的压力就比较大&am…

Sqlite3中replace语句用法详解

在本例中使用如下数据库表&#xff1a; &#xff08;图 1&#xff09; 该表的表名为student&#xff0c; 存储学生信息。 所有字段的数据类型都是TEXT 。 其中id和name作为复合主键。 email字段加上了唯一约束。建表语句如下&#xff1a; CREATE TABLE IF NOT EXISTS student …

[分布式一致性协议] ------ raft协议的解释与理解

前言 在分布式系统中&#xff0c;为了保证容错性&#xff0c;一般会维护多个副本集群&#xff0c;提高系统的高可用&#xff0c;但与之带来的问题就是多个副本的一致性&#xff08;consensus&#xff09;问题。 我们认为&#xff0c;对于一个具有一致性的的集群中&#xff0c;…