学习心得---策略模式

来源:互联网 发布:怎么在淘宝注册店铺 编辑:程序博客网 时间: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
原创粉丝点击