大话设计模式之策略模式
第二章:商场促销——策略模式
父类CashSuper
CashSuper.h
@interface CashSuper : NSObject -(double)acceptCash:(double)money; @end
CashSuper.m
@implementation CashSuper
-(double)acceptCash:(double)money{
return money;
}
@end
正常消费类 CashNormal
CashNormal.h
#import <Foundation/Foundation.h> #import "CashSuper.h" @interface CashNormal : CashSuper@end
CashNormal.m
#import "CashNormal.h"@implementation CashNormal -(double)acceptCash:(double)money{return money; } @end
打折消费类CashRebate
CashRebate.h
#import <Foundation/Foundation.h> #import "CashSuper.h" @interface CashRebate : CashSuper @property(assign,nonatomic)double Rebate; -(instancetype)initWithRebate:(double) Rebate; @end
CashRebate.m
#import "CashRebate.h"@implementation CashRebate - (instancetype)initWithRebate:(double)Rebate{self = [super init];if (self) {_Rebate=Rebate;}return self; } -(double)acceptCash:(double)money{return money*_Rebate; } @end
返利消费类CashReturn
CashReturn.h
#import <Foundation/Foundation.h> #import "CashSuper.h" @interface CashReturn : CashSuper @property(assign,nonatomic)double moneyCondition; @property(assign,nonatomic)double moneyReturn; -(instancetype)initWithMoneyCondition:(double)moneyCondition :(double)moneyReturn; @end
CashReturn.m
#import "CashReturn.h"@implementation CashReturn -(instancetype)initWithMoneyCondition:(double)moneyCondition :(double)moneyReturn {self = [super init];if (self) {_moneyCondition=moneyCondition;_moneyReturn=moneyReturn;}return self; } -(double)acceptCash:(double)money{double result=money;if (money>=_moneyCondition) {result=money-((int)(money/_moneyCondition))*_moneyReturn;}return result; } @end
配置类,维护对对象的使用CashContext类
CashContext.h
#import <Foundation/Foundation.h> #import "CashSuper.h" @interface CashContext : NSObject @property(nonatomic,strong)CashSuper *cashsuper; -(instancetype)initWith:(CashSuper *)csuper; -(double)GetResult:(double)money; @end
CashContext.m
#import "CashContext.h"@implementation CashContext - (instancetype)initWith:(CashSuper *)csuper {self = [super init];if (self) {_cashsuper=csuper;}return self; } -(double)GetResult:(double)money{return [_cashsuper acceptCash:money];} @end
主函数
#import <Foundation/Foundation.h> #import "CashContext.h" #import "CashSuper.h" #import "CashNormal.h" #import "CashRebate.h" #import "CashReturn.h" int main(int argc, const char * argv[]) {@autoreleasepool {char type='B';double result=0.0;CashContext *cc=nil;switch (type) {case 'N':cc=[[CashContext alloc]initWith:[[CashNormal alloc]init]];break;case 'B':cc=[[CashContext alloc]initWith:[[CashRebate alloc]initWithRebate:0.7]];break;case 'T':cc=[[CashContext alloc]initWith:[[CashReturn alloc] initWithMoneyCondition:300 :100]];break;}result = [cc GetResult:500];NSLog(@"%f",result);}return 0; }
运行打折类
转载于:https://www.cnblogs.com/qianLL/p/5232126.html
大话设计模式之策略模式相关推荐
- 【大话设计模式】策略模式
策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种定义一系列算法的方法,从概念上看,这些算法完成的都是相同的工作,只是实现不同 ...
- JavaScript设计模式之策略模式(学习笔记)
在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...
- Java设计模式之策略模式与状态模式
一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...
- 换个姿势学设计模式:策略模式
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...
- 研磨设计模式之 策略模式--转
http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式 2010-09-09 作者:云飞龙行 来源:云飞龙行的blog 先感谢众多朋友的支持 ...
- 设计模式:策略模式(Strategy)
定 义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...
- C++设计模式之策略模式(Strategy)
Strategy策略模式 作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: 代码实现 #include <iostream& ...
- python策略模式包含角色_详解Python设计模式之策略模式
虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...
- 一篇博客读懂设计模式之-----策略模式
设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...
最新文章
- FSWD_2_JavaScript
- 并查集-hdu3083-How Many Answers Are Wrong
- 少儿编程语言python-2019儿童编程语言大全
- 自定义控件:流式布局
- Python常用模块之configparser
- android aar编程,AndroidStudio脚本命令指定AAR生成目录与版本号
- 大剑无锋之介绍一下B+树【面试推荐】
- HDU 6836 Expectation(矩阵生成树 + 期望)
- 在PhotoShop中改像素m*n
- 升级过log4j,却还没搞懂log4j漏洞的本质?
- 马斯克:特斯拉汽车产量今年有望达到50万辆
- 易语言html实现报表打印,易语言报表统计功能例程可打印
- 浅谈C#的垃圾回收-关于GC、析构函数、Dispose、and Finalize asp.net GC之析构函数详解...
- html js 处理元素的数据属性(data)
- FillRect、FrameRect与Rectangle矩形绘制函数使用对比分析
- 磁盘读写的时间花费和调度算法(操作系统)
- iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传
- OpenCV如何进行图像的平滑和锐化处理?
- 隐藏tab标签完美解决办法
- html怎么设置毛笔字体,原来毛笔字体是这么设计的!
热门文章
- generator mysql插件_mybatis Generator最佳实践(数据库:mysql)
- python 浏览器,轻量级Python Web浏览器
- Win10美吱er吱er,Win10修改默认字体的方法
- 我用AI回怼美女汽车销售系列[yolo车牌识别](五) 完结
- 图数据集之cora数据集介绍 --- 适用于GCN任务
- 【网络设计_RegNet】Designing Network Design Spaces_2020
- 零信任模型_关于信任模型
- Chapter 5:Spectral-Subtractive Algorithms
- CRectTracker类的使用方法及其静态库下CRectTracker无法显示鼠标光标解决方案
- 小技巧,怎么让MFC的MDI程序子窗口看起来有扁平的效果