旧事重提——行为型设计模式总结一

由于行为型模式比较多,本人打算分两篇博客总结。今天一次介绍解释器、中介者、访问者、策略、备忘录、迭代器模式。

解释器:

适用场合:如果一种特定类型的问题发生的频率足够高,那么可能就值得向该问题的各个实例表述为一个简单语言中的句子。当有一个语言血药解释执行,并且你可将该语句中的句子表示为一个抽象语法树时,可使用解释器模式。

例如机房收费系统中,组合查询中,如果没有在SQL语句中对表中字段起别名,而且也没有使用视图进行中英文转换,那么就可以在UI层中使用该模式,将对应的参数进行解释。解释成对应表中字段。此方发没有没有去实现,只是感觉应该可以实现。

中介者:



 

中介者模式,就是通过Mediator类,来接受、发送消息,保持具体同事类的联系。而每个具体同事类只管自己的行为就可以了,而同事类之间的关系由Mediator类来保持和维护。

所以,我们可以看到中介者模式的优势,它达到了同事类的解耦,于此同时,也暴露了它的缺点,如果同事类太多的话,Mediator类将会非常庞大、复杂,使系统难以维护。

访问者:




访问者模式的目的就是把处理方法从数据结构中分离出来。所以它只适用于比较稳定的数据结构。这样的情况下使用访问者就可以灵活的变化算法。就如上面图中所例,数据结构很明显,人只分为男女两次,如果在想增加或减少数据结构的话,是非常困难的。而对于这个例子,我们却可以在Action类中给他加很多行为。

策略:


策略模式相对简单,再此不做过多讲解。

备忘录:



Originator是发起人,复杂创建一个备忘录,用以记录当前时刻它内部的状态,并可使用备忘录恢复内部状态;Memento是备忘录,存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录;Caretaker是管理者类,负责保存好备忘录。

备忘录最大的作用就是记忆角色的某一个状态,以后后来恢复到这个状态。例如命令模式中的撤销功能,我们就可以在命令模式中使用备忘录模式来存储可撤销操作的状态。

迭代器:



迭代器模式就是分离了几何对象的遍历行为,抽象出一个迭代器来负责,这样可以做到不暴露几何的内部结构,又可让外部代码透明地访问几何内部的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
比之前的合集更丰富详细的细节;没有最新只有更新! 1、建立GPRS连接 4 2、判断网络状态是否可用 4 3、获得惯性滑动的位置 5 4、横竖屏切换对话框消失 6 5、TextProssBar 显示文 7 6、TextView的效果 9 1、TextView的Html效果 9 2、TextView实现下划线效果: 10 3、Spanned 实现TextView的各种样式 10 7、通过HttpClient从指定server获取数据 13 8、隐藏小键盘 13 9、响应Touch 15 10、Activity间的通信 15 1、Bundle传值 15 2、利用startActivityForResult与onActivityResult方法 16 11、使程序完全退出 18 12、列出所有音乐文件 18 13、使用Intent ACTION 调用系统程序 19 显示网页: 19 显示地图: 19 路径规划: 19 拨打电话: 19 发送 SMS/MMS 20 发送 Email 20 为程序添加一个“分享” 21 打开多种类的文件: 21 Uninstall 程序 24 14、将Uri转为绝对路径 24 15、Android支持多种语言 25 16、四种动画的设置属性 25 1、尺寸伸缩动画效果 25 2、translate 位置转移动画效果 27 3、rotate 旋转动画效果 27 4、透明度控制动画效果 alpha 28 17、横竖屏状态获取 28 18、获取手指在屏幕的左右滑动 29 19、解除屏幕锁 30 20、ViewFlippe实现循环的动画 31 21、播放gif动画 31 22、飞行模式转换解析 36 23、实现按home键的效果 38 24、httpget与post 38 Handler+Runnable模式 40 Handler+Thread+Message模式 42 Handler+ExecutorService(线程池)+MessageQueue模式 44 Handler+ExecutorService(线程池)+MessageQueue+缓存模式 45 25、Bitmap操作 49 获得输入流 49 将输入流转化为Bitmap流 49 给ImageView对象赋值 49 获取SD卡上的文件存储路径 50 将图片保存到SD卡上 50 26、TextView垂直滚动 51 27、判断某服务是否开启 56 28、判断SD卡是否已挂载 56 29、文件操作类 57 1、获得文件或目录的大小 57 2、递归删除目录或文件 57 30、手动更新所有Widget 58 31、有关ListView 问题 58 32、在手机上打开文件的方法 59 33、使用系统自带的TabHost的问题 59 34、弹出菜单 61 35、Toast重叠显示时延迟解决 62 36、ADT新特性:ImageView的定义 62 37、MotionEvent 中获取坐标的问题 63 38、添加多个Widget样式 63 39、为Activity添加快捷方式 67 40、点击widget获取ID 68 41、ViewFlipper小动画 69 42、setTextColor的问题 70 43、获取程序信息并kill 70 44、mediaPlayer 与 soundPool 74 45、标题栏添加图标 76 46、 URI 76 案例分析:SD卡插拔事件的匹配 77 47、BroadcastReceiver旧事重提 77 48、从CalendarProvider得到数据的方法: 78 50、屏幕关闭,不睡眠 79 51、Android与 Linux休眠 79 52、防止系统、屏幕休眠(避免服务停止等问题) 83 53、读取office文件 88 1、读取doc文件: 88 2、 读取xls文件: 90 54、设置ListView滚动条属性 92 55、获取Array.xml文件中的值 93 56、获取系统媒体声音文件 93 57、自定义Adapter 94 58、记住listview滚动位置 94 59、更改系统超时休眠的时间 94 60、更改对话框大小 95 61、json数据格式解析 95 62、两种Toast 97 63、控件抖动的实现 98 64、判断媒体文件类 99 65、编写使用root权限的应用 102 66、获取所有安装了的App的信息 103 67、帧动画 104 68、scrollview 106 1、横向反弹效果 106 2、整个屏幕横向滚动 108 69、内存泄露分析 111 1、内存检测 111 2、内存分析 112 70、避免内存泄露 113 71、屏蔽Home键 118 72、onTouch 和 onClick 事件 118 73、监听某个数据表 119 74、IP地址 120 1、获得IP 120 2、设置IP 121 75、判断Intent是否可用 122 76、软件更换皮肤 122 77、禁止软件盘自动弹出 124 78、EditText设置最大宽度 124 79、搭建流媒体服务器 125 80、获得 LayoutInflater 实例的三种方式 125 81、获得屏幕像素的两种方法 126 82、ShowDialog(int id); 126 83、透明效果的实现 128 84、根据网络或GPS获得经纬度 128 85、TextView 130 90、获取存储卡和手机内部存储空间 130 91、获得当前应用的UID 131 92、图片压缩类 132 93、一次性退出所有Activity 136 95、Java替换符串,不区分大小写 138 96、Java获得随机数 139 97、MD5加密 141 98、HTTP数据传输 141 从Internet获取数据 141 向Internet发送数据 143 99、Jason解析 146 100、广播 147 101、SQLite清空数据库 147 102、反射机制 148 103、JS 148 104、TextView多行末尾显示省略号 148 105、竖直显示的textView 153

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值