欢迎来到天天文库
浏览记录
ID:40313373
大小:112.50 KB
页数:11页
时间:2019-07-30
《设计模式之行为型模式三》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、软件英才网软件行业驰名招聘网站设计模式之行为型模式三来自何静媛的博客行为型模式:策略模式 它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。简单工厂模式的不足: 由于工厂本身包括了所有的收费方式,商场是可能经常性的更改打折额度和返利额度,每次维护或扩展收费方法都要改动这个工厂,以致代码需重新编译部署,很麻烦方法: 1,定义一个所有支持的算法的公共接口 2,将所有具体算法或行为封装在一起 3,维护对公共接口的引用 客户端代码是将所有的算法实例化 这个模式涉及到三个角色:
2、有需要请联系我们软件英才网软件行业驰名招聘网站 环境(Context)角色:持有一个Strategy类的引用。 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为 优点: 使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类(ConcreteStrategy)中提供。由于算法和环境独立开来,算法的增减、修改都不会影响环境和客户端。当出现新的促销折扣或现有的折扣政策
3、出现变化时,只需要实现新的策略类,并在客户端登记即可。策略模式相当于"可插入式(Pluggable)的算法" 个人理解: 策略模式与工厂模式有需要请联系我们软件英才网软件行业驰名招聘网站 工厂模式是将需要实例化的所有对象放到一个类中,然后在客户端直接使用工厂的方法,实现不同对象的不同操作策略模式是将工厂中的方法提取出来,然后将需要实例化的对象都放到了客户端去实例。当我需要添加不同的策略时,只在客户端添加它的实例即可,然后将对象作为参数传到策略模式中即可 策略模式结构图: 课本实例:商场打折 代码如下:[csharp] viewplaincopyprint
4、?1.class cashcontext 2. { 有需要请联系我们软件英才网软件行业驰名招聘网站1. //基类类型的对像 2. private CashSuper cs; 3. //初始化时(构造函数),传入具体的对象 4. public cashcontext(CashSuper csuper) 5. { 6. this.cs = csuper;
5、 7. //将csuper赋给cs,然后计算cs对象的收到的现金数 8. //通过传入参数的不同,计算不同方式的收到现金数 9. } 10. public double getresult(double money) 11. //根据具体的策略对象,调用其算法的方法 12. { 13. return cs.accept
6、Cash(money); 14. 15. } 16. } 备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态 课本实例:游戏的状态保存 有需要请联系我们软件英才网软件行业驰名招聘网站代码如下:[csharp] v
7、iewplaincopyprint?1.//一个发起人类:有攻击力,生命力,还有创建备忘和恢复备忘的功能等 2. class GameRole 3. { 4. //生命力 5. private int vit; 6. public int Vitality 7. { 8. get { return vit; } 9.
此文档下载收益归作者所有