标签:
1.背景
假设你是图书商场的管理员,现在商场要对图书进行降价促销,要求你根据以下规则来为所有参加促销的图书标上价格:
1.地理类图书如果出版社为工业那么都降价10%,其它价格在100元以上的降价20元,在100以下的降价12元。
2.计算机类图书降价13元i
......
那么当你图书进行标价的时候,就会据该图书的类型,价格去选择不同的折扣规则,也就是根据当前环境(图书的类型,价格,出版社)的不同,选择不同的业务算法(各种折扣规则)来处理。对于这种况可以采用策略模式来设计你的代码。
2.策略模式是什么?
策略模式是一种行为模式,是对算法的封装,把算法的使用和算法本身分割开,并委托个不同的类。 简单点,准备一组算法,并把每个算法封装起来,在她们之间可以互换。其UML图如下:
3.策略模式的优缺点
3.1 优点:
a.对算法进行了封装,如果以后有新的算法,只要对新算法进行封装,不必改变以前的代码就行了;
b.把选择算法的责任和算法本身分割开了;
c.使用者能够随时在算法之间进行切换;
3.2 缺点
a.由于选择算法的责任在使用者角色里,那使用者角色必须知道所有的算法,才能进行选择。
b.使用者只能选择一种算法,不能选择多种算法。
c.如果多个使用者在使用同一个算法,那么就会创建多个该算法的实例对象,增加了内存的消耗(可以通过享元模式来解决)。
4.应用建议
a.如果多个类,它们的属性相同,只是行为不同,比如例子中的图书的折扣(有很多种图书,它们都有相同的原价,但它们有不同的打折行为)
b.一个类可以动态的选择行为
c.在具有多重条件语句时可以考虑用策略模式
标签:
原文地址:http://www.cnblogs.com/eyyzx678/p/4502321.html