工程案例,设计模式——策略模式
来源:互联网 发布:linux认证等级 编辑:程序博客网 时间:2024/06/05 06:56
策略模式定义
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。先放一张典型的类图:
图中AlgorithmInterface()就是所谓的算法,StrategyA/B/C都封装实现了。黄色部分是调用!
下面我将从项目经验中,举实例说明一下策略模式。
使用策略模式
项目软件的登录流程。有首次登录、二次登录和短信登录。这三种登录方式流程大致相同,有一些差别。首先说一下相同的地方,比如:
1. 登录前:连接Server,无论那种方式都需要连接服务器。方法名ConnectServer();
2. 登录中:对密码加密算法。方法名:EncryptPWD();
3. 登录后:有一些逻辑操作。方法名:DealwithLoninOK();
但是,登录过程中对密码的操作,三种方式都是不一样的;登录后的一些逻辑操作也是不一样的。按照一般的思维:我们必须在EncryptPWD添加一个switch,区分不同类型登录的逻辑。
使用策略模式的办法是这样的:首先定义一个基类LoginStrategy,定义上面三个接口。
@interface FtLoginStrategy : NSObject{ }-(void) ConnectServer;-(void) EncryptPED:(NSString*)pwd;-(void) DealwithLoginOK;-(NSString*)loginStrategyType;//用于区分登录类型,基类返回const string即可@end
从LoginStrategy派生三个类:FirstLoginStrategy,SecondLoginStrategy和SMSLoginStrategy出来。
无论那种登录方式,都是连接同一个服务器。所以ConnectServer()的逻辑是一致的,所以派生类可以不实现ConnectServer()。但是三个派生类需要实现
-(void) EncryptPWD;-(void) DealwithLoginOK;那么在调用登录的时候,根据不同的需要你可以这么用了:
LoginStrategy * login = [[FirstLoginStrategy alloc]init];//LoginStrategy * login = [[SecondLoginStrategy alloc]init];//或者//LoginStrategy * login = [[SMSLoginStrategy alloc]init];//或者[login ConnectServer];[login EncryptPWD:(pwd)];[login DealwithLoginOK];
策略模式的好处
之前看到很多策略模式的文字都是不错的,但是例子不太好理解。这次把项目中真是的案例写出来。
好处显而易见:假如将来添加一个二维码登录的需求,那么,在目前三种登录代码的基础上,再添加一个类即可。
策略模式还是面向对象思想“继承+多态+封装”的应用,不用设计模式,使用type来区分也能达到目的,不过设计模式让代码更优雅。
可否使用状态模式
在做登录设计的时候,考虑过使用状态模式。状态模式的类图跟策略模式是一样的,说明他们本质上是一样的,但是使用场景不一样。
状态模式注重内部状态的改变、更新。使用过程中可能从StatusA-->StatusB-->StatusC-->StutasA.这样的改变,表现比较“动态”,策略模式表现则比较“静态”。
后来,根据登录的特性,每个状态也要还要区分“短信登录”、“首次登录”和“二次登录”等,采用策略模式,将步骤流程写死到策略中。如果中间出问题,则会从头开始执行,这样就不存在状态的切换了。
- 工程案例,设计模式——策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式——策略设计模式
- Java设计模式—策略
- 设计模式——策略模式
- 设计模式——策略模式
- 每日设计模式——策略模式
- dsfgjghf
- 实体引擎与ORM的区别
- adsfgh
- 读取Telnet命令行结果总是乱码
- destoon实现商铺管理主页设置增加新菜单的方法
- 工程案例,设计模式——策略模式
- Openstack Keystone 程序结构
- LeetCode Valid Palindrome
- sql server 数据库系统整理——数据的增、删、改
- 省市区代码维护
- adgbfthgf
- eclipse常用快捷键
- c++11新特性
- dasfhjk