大班模型行为PK(总结)
行为类模式包括责任链模式、命令模式、解释器模式、迭代模式、中介模式、备忘录模式、观察者模式、State模式、策略模式、模板方法、Visitor模式,我去,许多。。
。主要有以下挑几个easy混乱和控制指令更重要方式。
、命令模式VS策略模式
1、关注点不同
策略模式关注的是算法替换的问题:一个新的算法投产,旧算法退休,或者提供多种算法由调用者自己选择使用,算法的自由更替是它实现的要点。
换句话说,策略模式关注的是算法的完整性、封装性,仅仅有具备了这两个条件才干保证其能够自由切换。
命令模式则关注的是解耦问题。怎样让请求者和运行者解耦是它须要首先解决的。解耦的要求就是把请求的内容封装为一个一个的命令,由接收者运行。因为封装成了命令。就同一时候能够对命令进行多种处理。比如摊销、记录等。
2、角色功能不同
策略模式中的详细算法是负责一个完整算法逻辑。它是不可再拆分的原子业务单元。一旦变更就是对算法总体的变更。
命令模式傲游命令的实现,也就是功能的实现。
比如我们在分支中也提到接收者的变更问题。它仅仅影响到命令族的变更。对请求者没有不论什么影响,从这方面来说,接收者对命令负责,而与请求者无关,命令模式中的接收者仅仅要符合六大设计原则,全然不用关心它是否完毕了一个详细逻辑,它的影响范围也仅仅是抽象命令和详细命令。对它的改动不会扩散到模式外的模块。
当然,假设在命令模式中须要指定接收者,则须要考虑接收者的变化和封装。
3、使用场景不同
策略模式适用于算法要求变换的场景,而命令模式适用于解耦两个有紧耦合关系的对象场合或者多命令多撤销的场景。
二、策略模式VS状态模式
1、环境角色的职责不同
两者都有一个叫Context环境角色的类。可是两者的差别非常大,策略模式的环境角色仅仅是一个托付作用,负责算法的替换。而状态模式的环境角色不权权是托付行为。它还详细登记状态变化的功能。与详细的状态类协作,共同完毕状态切换行为随之切换的任务。
2、解决这个问题的重点不同
策略模式旨在解决内部算法怎样改变的问题,也就是将内部算法的改变对外界的影响减少到最小程序。它保证的是算法能够自由地切换。而状态模式旨在解决内在状态的改变而引起行为改变的问题,它的出发点是事物的状态,封装状态而暴露行为,一个对象的状态改变。从外界来看就好像是行为改变。
3、解决这个问题的方法不同
策略模式仅仅是确保算法能够自由切换。可是什么时候用什么算法它决定不了。而状态模式对外暴露的是行为,状态的变化通常是由环境角色和详细状态共同变化的。也就是说状态模式封装了状态的变化而暴露了不同的行为或行为结果。
4、应用场景不同
策略模式仅仅是一个算法的封装,能够是一个有意义的对象,也能够是一个无意义的逻辑片段,比方MD5加密算法。
其算法必须是平行的,能够相互替换,否则策略模式就封装了一堆垃圾。状态模式则要深圳市一系列状态发生变化的场景,它要求的是有状态且有行为的场景,也就是一个对象必须具有二维(状态和行为)描写叙述才干採用状态模式,假设仅仅有状态而没有行为,则状态的变化就失去了意义。
5、复杂度不同
从设计模式的角度分析,通常策略模式比較简单,这里的简单指的是结构简单,扩展比較easy。并且代码也easy阅读。而状态模式则通常比較复杂,由于它要从两个角色看到一个对象状态和行为的改变,也就是说它封装的是变化。要知道变化是无穷尽的,因此相对来说状态模式通常都比較复杂,涉及面非常多。尽管也非常easy扩展,可是一般不会进行大规模的扩张和修正。
三、观察者模式VS责任链模式
这两个好像没什么相似的?观察者模式中一个详细的角色既能够是观察者。也能够是被观察者,这样就形成了观察者链。
这与责任链模式很类似,它们都实现了事务的链条化处理。
1、链中的消息对象不同
从首节点開始到终于的尾节点,两个链中传递的消息对象是不同的。责任链模式基本上不改变消息对象的结构,尽管每一个节点都能够參与消费,可是它的结构不会改变。可是在观察者模式中是同意的,链中传递的对象能够自由变化。仅仅要上下级节点对传递对象了解就可以,它不要求链中的消息对象不可变化 ,它仅仅要求链中相邻两个节点的消息对象固定。
2、上下节点的关系不同
在责任链模式中,上下节点没有关系。都是接收相同的对象,全部传递的对象都是链首传递过来,上一节点是什么没有关系。仅仅要依照自己的逻辑处理就成,而观察者模式就不同了,它的上下级关系非常亲热,下级对上级顶礼膜拜,上级对下级绝对信任,链中的随意两个相邻节点都是一个坚固的独立团体。
3、消息的分销渠道不同
在责任链模式中,一个消息从链首传递进来后,就開始沿着链条向链尾运动,方向是单一的、固定的;而观察者模式则不同,有很大的灵活性。一个消息传递到链首后。详细怎么传递是不固定,可传输广播,是可能的跳方式传送。它取决于消息处理逻辑。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
大班模型行为PK(总结)的更多相关文章
- TP6.0 一对一模型关联 belongsTo 相对关联(反向关联)
1. 创建数据表 一对一反向关联使用率很高 附表关联主表称为反向关联,又称为相对关联(tp官方手册这样叫) -- 分类表 CREATE TABLE `category` ( `id` int(10) ...
- 如何使用自对弈强化学习训练一个五子棋机器人Alpha Gobang Zero
前言 2016年3月,Alpha Go 与围棋世界冠军.职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜,在当时引起了轩然大波.2017年10月,谷歌公布了新版五子棋程序 AlphaGo Ze ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- ASP.NET MVC系列:添加模型
模型(Model)是应用程序中用于处理应用程序数据逻辑的部分;通常模型对象在数据库中存取数据 添加模型类 在解决方案中右击Models文件夹,然后选择“添加”,在“添加”项里选择“类”:或者选中Mod ...
- 第29章 跨战区大PK
29.1 策略模式 VS 桥梁模式 29.1.1 策略模式 [编程实验]用策略模式实现邮件发送 (1)有文本和超文本两种格式的邮件,将这两种格式封装成两种不同的发送策略. (2)文本邮件和超文本邮件分 ...
- Caffe学习系列(17):模型各层数据和参数可视化
cifar10的各层数据和参数可视化 .caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1p ...
- ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )
//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...
- 5、处理模型数据ModelAndView、Map、Model以及@SessionAttributes注解
Spring MVC提供了以下几种途径输出模型数据 —— ModelAndView: 处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据.数据会添加到request域中. ...
- Django模型修改及数据迁移
Migrations Django中对Model进行修改是件麻烦的事情,syncdb命令仅仅创建数据库里还没有的表,它并不对已存在的数据表进行同步修改,也不处理数据模型的删除. 如果你新增或修改数据模 ...
随机推荐
- ImageButton按压效果失效
LinearLayout中ImageButton的按压效果不起作用,如图 布局如下: <LinearLayout android:id="@id/ll_add_reply_face&q ...
- 使用 Google Guava 美化你的 Java 代码:1~4 【转】
文章转载自:http://my.oschina.net/leejun2005/blog/172328 1.使用Google Collections,Guava,static imports编写漂亮代码 ...
- js实现操作等待提示loading……
js实现操作等待功能,防止重复提交,界面友好,底部为灰色遮罩层,防止用户重复操作. 先看效果图: 接着看js代码: //关闭等待窗口 function closeWaiting() { var b ...
- 标准模板库(STL) map —— 初始化问题
map 容器没有:.reverse成员: map 是关联式容器,会根据元素的键值自动排序: map 容器不是连续的线性空间: 标准 STL 使用 RB-tree 为底层机制 ⇒ 自动排序(关于键值): ...
- 文件上传api——MultipartFile
MultipartFile 方法总结 byte[] getBytes() 返回文件的内容作为一个字节数组. String getContentType() 返回文件的内容类型. InputStr ...
- 【BZOJ1426】收集邮票 概率DP 论文题 推公式题
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- C/C++ 变量的初始化
局部变量,初始化为垃圾值,局部静态变量初始化为 0: 1. 二维数组 // 作为局部变量 int arr[4]; // 全是垃圾值 int arr[4] = {1}; // 第一个元素为 1,其他默认 ...
- Haproxy解析
简单介绍 HAProxy是一款提供高可用性.负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是全然免费的.借助HAProxy能够高速而且可靠的提供基于TCP和HTTP应用的代理解决方式. ...
- 数据序列化之protobuf
数据序列化之protobuf 很多时候需要将一些数据打包,就是把这些数据搞在一起,方便处理.最常见的情况就是把需要传输的数据,当然数据不止一条,打包成一个消息,然后发送出去,接收端再以一定的规则接收并 ...
- 【BZOJ 1008】[HNOI2008]越狱
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 [题意] [题解] 相邻就会犯罪的话; 可以考虑它的反面; 即让所有相同信仰的人 ...