学习心得---策略模式
来源:互联网 发布:怎么在淘宝注册店铺 编辑:程序博客网 时间:2024/06/04 00:51
策略模式(Strategy)定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
个人觉得这篇写的不错:http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html
大话设计模式-策略模式:http://www.cnblogs.com/cj723/archive/2007/03/21/682479.html
本文案例:已制造手机为例,首先定义手机基类PhoneBase,如图所示:该类有一个Call方法(拨打电话的基本功能);所有的手机都必须有拨打电话的功能,至于CPU、屏幕、键盘、触屏等等则是不同产品自己的特性了;像这些变化的东西不能封装到基类当中。那么我们需要定义成抽象类或接口。来封装这些变化的东西;
这里只写了列举了屏幕和CPU,这里定义了IScreen的接口,而Screen720P(720p高分屏)、Screen1080P(1080P高分屏)、ScreenOthers(其它类型屏幕)、这几个类分别实现IScreen接口,实现了对这些不同屏幕制造工艺的封装;CPU也是一样,定义了一个ICPU的接口。而CPU64(64位的CPU)、CPU64_2(64位的双核CPU)、CPU64_4(64位的4核CPU)、CPU64_8(64位的8核CPU)
lumia1520手机,厂家实际配置为:4核CPU、1080P高分屏、。。。。等等,实际代码如下:
/// <summary> /// Lumia1520 /// </summary> public class Lumia1520 : PhoneBase { /// <summary> /// CPU /// </summary> private ICPU _CPU; /// <summary> /// 屏幕 /// </summary> private IScreen _Screen; /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { StringBuilder strBuilder = new StringBuilder(); strBuilder.AppendFormat("Lumia1520基本功能:{0}", Call()); //CPU使用4核的 _CPU = new CPU64_4(); string cpu; cpu = _CPU.Create(); strBuilder.AppendFormat("CPU:{0}", cpu); //屏幕使用1080p的 _Screen = new ScreenOthers(); string screen; screen = _Screen.Create(); strBuilder.AppendFormat("屏幕:{0}", screen); return strBuilder.ToString(); } }
Lumia1520,打电话的基本功能集成自PhoneBase,而CPU、屏幕变化的东西则来自相对应的CPU和屏幕型号类;
源码如下:
/// <summary> /// lumia525 /// </summary> public class Lumia525 : PhoneBase { /// <summary> /// CPU /// </summary> private ICPU _CPU; /// <summary> /// 屏幕 /// </summary> private IScreen _Screen; /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { StringBuilder strBuilder = new StringBuilder(); strBuilder.AppendFormat("Lumia525基本功能:{0}", Call()); //CPU使用4核的 _CPU = new CPU64_2(); string cpu; cpu = _CPU.Create(); strBuilder.AppendFormat("CPU:{0}", cpu); //屏幕使用1080p的 _Screen = new Screen1080P(); string screen; screen = _Screen.Create(); strBuilder.AppendFormat("屏幕:{0}", screen); return strBuilder.ToString(); } } /// <summary> /// Lumia1520 /// </summary> public class Lumia1520 : PhoneBase { /// <summary> /// CPU /// </summary> private ICPU _CPU; /// <summary> /// 屏幕 /// </summary> private IScreen _Screen; /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { StringBuilder strBuilder = new StringBuilder(); strBuilder.AppendFormat("Lumia1520基本功能:{0}", Call()); //CPU使用4核的 _CPU = new CPU64_4(); string cpu; cpu = _CPU.Create(); strBuilder.AppendFormat("CPU:{0}", cpu); //屏幕使用1080p的 _Screen = new ScreenOthers(); string screen; screen = _Screen.Create(); strBuilder.AppendFormat("屏幕:{0}", screen); return strBuilder.ToString(); } } /// <summary> /// 手机基类 /// </summary> public class PhoneBase { /// <summary> /// 拨打电话基本功能 /// </summary> /// <returns></returns> public string Call() { return "拨打电话"; } } /// <summary> /// cpu接口 /// </summary> public interface ICPU { /// <summary> /// 制造 /// </summary> /// <returns></returns> string Create(); } /// <summary> /// 64位单核CPU /// </summary> public class CPU64 : ICPU { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "64位单核CPU"; } } /// <summary> /// 64位双核CPU /// </summary> public class CPU64_2 : ICPU { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "64位双核CPU"; } } /// <summary> /// 64位4核CPU /// </summary> public class CPU64_4 : ICPU { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "64位4核CPU"; } } /// <summary> /// 64位8核CPU /// </summary> public class CPU64_8 : ICPU { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "64位8核CPU"; } } /// <summary> /// 屏幕 /// </summary> public interface IScreen { /// <summary> /// 制造 /// </summary> /// <param name="type">制造的类型</param> /// <returns></returns> string Create(); } /// <summary> /// 生产720p高分屏 /// </summary> public class Screen720P : IScreen { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "720p高分屏"; } } /// <summary> /// 生产1080p高分屏 /// </summary> public class Screen1080P : IScreen { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "720p高分屏"; } } /// <summary> /// 生产其他屏幕 /// </summary> public class ScreenOthers : IScreen { /// <summary> /// 制造 /// </summary> /// <returns></returns> public string Create() { return "其他屏幕"; } } }
写的不好不对的地方,请大家及时指正,谢谢。
0 0
- 学习心得---策略模式
- 观察者模式学习心得
- 访问者模式学习心得
- 保护模式编程学习心得
- 设计模式学习心得
- Java设计模式学习心得
- Java设计模式学习心得
- 设计模式学习心得
- 模式设计学习心得
- 设计模式学习心得
- 设计模式学习心得
- 观察者模式学习心得
- 设计模式学习心得
- 设计模式学习心得
- Java设计模式学习心得
- JavaScript 设计模式学习心得
- 策略模式
- 策略模式
- Android虚拟机 Dalvik
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
- 在daoImpl.java导出
- 浅谈网络语音技术
- JQuery Layer应用示例
- 学习心得---策略模式
- 几种手势操作的最基本实现
- BloomFilter of Guava
- vs下设置动态库输出文件名
- 基于Gist特征的相似图像检索
- 解析下HibernateSessionFactory.java
- 企业站SEO排名维护及资源利用分析(三)
- 本人第一个android游戏《新连连看》上架
- PHP 对象和引用