设计模式之策略设计模式
设计模式 策略
2023-09-14 08:57:59 时间
问题引入:在一些购物系统,可能会在搞一些促销,比如满多少减多少,全场打折等,那这样的怎么设计比较好呢?这时策略模式就是一个很好的解决方法。
1.定义
定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
2.UML类图
3.实现
1、定义baseStrategy接口CashBase
#import Foundation/Foundation.h #import UIKit/UIKit.h @protocol CashBase NSObject -(CGFloat)acceptCash:(CGFloat)cash;2.定义Strategy接口子类CashNormal
#import Foundation/Foundation.h #import "CashBase.h" @interface CashNormal : NSObject CashBase @end
#import "CashNormal.h" @implementation CashNormal -(CGFloat)acceptCash:(CGFloat)cash{ return cash; @end定义子类CashRobate
#import Foundation/Foundation.h #import "CashBase.h" @interface CashRobate : NSObject CashBase -(instancetype)initWithMoneyRebate:(CGFloat)moneyRebate;
#import "CashRobate.h" @interface CashRobate () @property(nonatomic)CGFloat moneyRebate; @implementation CashRobate -(instancetype)initWithMoneyRebate:(CGFloat)moneyRebate{ self = [super init]; if (self) { _moneyRebate = moneyRebate; return self; -(CGFloat)acceptCash:(CGFloat)cash{ return self.moneyRebate * cash; @end定义子类CaseReturn
#import Foundation/Foundation.h #import "CashBase.h" @interface CaseReturn : NSObject CashBase -(instancetype)initWithMoneyCondition:(CGFloat)moneyCondition moneyReturn:(CGFloat)moneyReturn;
#import "CaseReturn.h" @interface CaseReturn () @property(nonatomic)CGFloat moneyCondition; @property(nonatomic)CGFloat moneyReturn; @implementation CaseReturn -(instancetype)initWithMoneyCondition:(CGFloat)moneyCondition moneyReturn:(CGFloat)moneyReturn{ self = [super init]; if (self) { _moneyCondition = moneyCondition; _moneyReturn = moneyReturn; return self; -(CGFloat)acceptCash:(CGFloat)cash{ return self.moneyCondition - self.moneyReturn; @end定义context
#import Foundation/Foundation.h #import "CashBase.h" @interface CashContext : NSObject -(instancetype)initWithCashSuper:(id CashBase )cashBase; -(CGFloat)getResult:(CGFloat)money; @end
#import "CashContext.h" @interface CashContext() @property(strong,nonatomic) id CashBase cashSuper; @implementation CashContext -(instancetype)initWithCashSuper:(id CashBase )cashBase{ self = [super init]; if (self) { self.cashSuper = cashBase; return self; -(CGFloat)getResult:(CGFloat)money{ return [self.cashSuper acceptCash:money]; @end4.调用
CashRobate *robate = [[CashRobate alloc]initWithMoneyRebate:0.8]; CashContext *context = [[CashContext alloc]initWithCashSuper:robate]; NSLog(@"结果是%f",[context getResult:100]); CaseReturn *cashReturn = [[CaseReturn alloc]initWithMoneyCondition:300 moneyReturn:100]; CashContext *contextReturn = [[CashContext alloc]initWithCashSuper:cashReturn]; NSLog(@"结果是%f",[contextReturn getResult:0]);
5.输出
11种常用的设计模式 有这么一个很形象的比喻,把写代码比作是建房子,代码比作是砖瓦、一个完整的系统就好比是一栋高楼大厦、程序员无疑就好比是建(ban)筑(zhuan)工,这些很表面的东西我们都可以很形象深刻的理解,其实要设计和开发一个系统远远不只这些东西,深挖表象之下隐藏着的细节往往才是灵魂所在,诸如:算法和数据结构、框架、设计模式等,设计模式是一个虚幻的抽象的概念,好比建造房子时的设计理念方案一样,一个软件系统扩展性、可维护性以及稳定健壮性如何,很大程度上取决于设计模式。
C#设计模式总结 原文:C#设计模式总结 经过这段时间对设计模式的学习,自己的感触还是很多的,因为我现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构。所以,学完设计模式之后,感觉它会慢慢地影响到你写代码的思维方式。
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
相关文章
- 从ES6重新认识JavaScript设计模式: 装饰器模式
- 常用的设计模式
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
- 设计模式的优雅:函数式pipeline+策略模式实现复杂业务@落雨
- 接口与抽象类的应用(包括各自设计模式)
- 《设计模式之禅》--空对象模式
- 【设计模式】策略模式
- 「补课」进行时:设计模式(11)——游戏中的策略模式
- 设计模式六大原则
- 《Android源码设计模式》--原型模式
- 不一样的策略模式(设计模式五)
- Builder建造者设计模式
- Java设计模式之策略模式与状态模式
- python 设计模式之策略模式
- 设计模式学习笔记-简单工厂模式
- 设计模式 之 概述
- 设计模式 Template Method模式 显示程序猿的一天
- 再回想一下设计模式——策略模式
- 【C++设计模式】创建型模式 — 建造者模式
- 【设计模式】策略模式