《Head First设计模式》读书笔记之策略模式
来源:互联网 发布:研华usb数据采集卡 编辑:程序博客网 时间:2024/05/16 10:46
学习java快一年了,一开始学习java是为了编写android软件,最近花了一个月做出了个android小软件,开发完了才觉得java学的有点不是很牢固,所以想找几本关于java的书看看。前几天上微薄一个大神介绍了几本java初级的书,其中就这本《Head First设计模式》,于是就打算把这本书好好看看。感觉这本书很适合初学者,而且讲解的挺有趣的,不会让你感到有种压力。以前也学了一点设计模式,但没怎么搞明白,这本书刚看了第一章就感觉收获挺大的,于是就乘热打铁写写笔记来加深记忆。
目前刚看了两章,先来个策略模式(Strage pattern)
书中举得例子是鸭子游戏的实现,为了实现这个鸭子游戏的弹性,引出了三条设计原则:
1.找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
例子中将鸭子飞行行为和鸣叫行为(各种鸭子的飞行行为和鸣叫行为有所不同)和鸭子的游泳行为分开独立出来。
2.针对接口编程,而不是针对实现编程
鸭子的行为和鸭子种类都是实现了Interface,而不是针对真实的类。
3.多用组合(composition),少用继承
书中提出:有一个比是一个更好,鸭子的行为是一个一个组合而来的,每一个行为都实现一个行为接口,这样更易于对鸭子行为的添加与修改
策略模式(Strage pattern)的正式定义:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
下面完成了设计谜题中的习题:
//抽象环境角色,Character超类,所有人物角色都继承自该类public abstract class Character{WeaponBehavior weapon;public void fight();publci void setWeapon(WeaponBehavior w){this.weapon=w;}}
//皇后类,具体环境角色,持有一个策略类的引用,最终给客户端调用的,继承自人物类public class Queen extends Character{public Queen(){weapon=new KnifeBehavior();//持有匕首}public void fight(){weapon.useWeapon();}}
//国王类,具体环境角色,持有一个策略类的引用,最终给客户端调用的,继承自人物类public class King extends Character{public King(){weapon=new SwordBehavior();//持有宝剑}public void fight(){weapon.useWeapon();}}
//抽象策略角色:策略类,通常由一个接口或者抽象类实现,武器接口public interface WeaponBehavior{public void useWeapon();}
//具体策略角色,包装了相关的算法和行为,匕首武器,实现了武器接口public class SwordBehavior implements WeaponBehavior{public void useWeapon(){System.out.println("I use sword!");}}
//具体策略角色,包装了相关的算法和行为,宝剑武器,实现了武器接口public class KnifeBehavior implements WeaponBehavior{public void useWeapon(){System.out.println("I use knife!");}}
为了动态的改变人物的武器行为,我们可以为Character类编写setWeapon(WeaponBehavior weapon)方法,于是当我们要为国王调用匕首武器时,就可以调用此方法!
其实策略模式也有缺点,比如客户必须要知道所有的策略类,并自行决定使用哪一个策越类,另一个问题是会造成许多的具体的策略类
策略模式介绍到此!
- 【Head First设计模式-读书笔记】策略模式
- 读书笔记---Head First 设计模式--- 策略模式
- 《Head First设计模式》读书笔记之策略模式
- 《Head First 设计模式》读书笔记之策略模式
- Head First设计模式读书笔记之策略模式
- 《head first 设计模式》之策略模式
- 《Head First设计模式》之策略模式
- 《Head First 设计模式》之策略模式
- 《Head First设计模式》之策略模式
- 《Head First设计模式》之策略模式
- 《Head First 设计模式》之策略模式
- 《Head First 设计模式》读书笔记之1:设计模式入门(策略模式)
- "Head First 设计模式"读书笔记——策略模式
- 《Head First设计模式》读书笔记1——策略模式
- 《Head First设计模式》 读书笔记01 策略模式
- 读书笔记1:Head First设计模式——策略模式
- 读书笔记之head first设计模式1
- java设计模式-Head First设计模式之策略模式
- Python进阶03 模块
- 时间、海绵、水
- MongoDB 学习(1): 概述
- 在线求解啊 模拟器上能运行,但是在手机上无法运行
- nginx完整配置示例
- 《Head First设计模式》读书笔记之策略模式
- MFC中OnCtlColor
- iptables简单实例
- 技术积累应用-可视化编程平台应用层面:应用模块类
- Servlet的问题Cannot forward after response has been committed
- 经典语句——经典人生
- 燕十八 PHP课堂笔记----级联目录
- Mongo DB 学习(2): 简单命令
- sql数据库的基础运用