HCDCashBase.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol HCDCashBase <NSObject>
-(CGFloat)acceptCash:(CGFloat)cash;
@end
#import <Foundation/Foundation.h>
#import "HCDCashBase.h"
@interface HCDCashNormal : NSObject<HCDCashBase>
@end
#import "HCDCashNormal.h"
@implementation HCDCashNormal
-(CGFloat)acceptCash:(CGFloat)cash{
return cash;
}
@end
#import <Foundation/Foundation.h>
#import "HCDCashBase.h"
@interface HCDCashRobate : NSObject<HCDCashBase>
-(instancetype)initWithMoneyRebate:(CGFloat)moneyRebate;
@end
#import "HCDCashRobate.h"
@interface HCDCashRobate ()
@property(nonatomic)CGFloat moneyRebate;
@end
@implementation HCDCashRobate
-(instancetype)initWithMoneyRebate:(CGFloat)moneyRebate{
self = [super init];
if (self) {
_moneyRebate = moneyRebate;
}
return self;
}
-(CGFloat)acceptCash:(CGFloat)cash{
return self.moneyRebate * cash;
}
@end
#import <Foundation/Foundation.h>
#import "HCDCashBase.h"
@interface HCDCaseReturn : NSObject<HCDCashBase>
-(instancetype)initWithMoneyReturn:(CGFloat)moneyReturn;
@end
#import "HCDCaseReturn.h"
@interface HCDCaseReturn ()
@property(nonatomic)CGFloat moneyReturn;
@end
@implementation HCDCaseReturn
-(instancetype)initWithMoneyReturn:(CGFloat)moneyReturn{
self = [super init];
if (self) {
_moneyReturn = moneyReturn;
}
return self;
}
-(CGFloat)acceptCash:(CGFloat)cash{
return cash - self.moneyReturn;
}
@end
#import <Foundation/Foundation.h>
#import "HCDCashBase.h"
typedef NS_ENUM(NSInteger, HCDCashType){
CashTypeNormal = 0,
CashTypeRobate,
CashTypeReturn
};
@interface HCDCashContext : NSObject
-(instancetype)initWithCashType:(HCDCashType)type;
-(CGFloat)getResult:(CGFloat)money;
@end
#import "HCDCashContext.h"
#import "HCDCaseReturn.h"
#import "HCDCashNormal.h"
#import "HCDCashRobate.h"
@interface HCDCashContext()
@property(strong,nonatomic) id<HCDCashBase> cashSuper;
@end
@implementation HCDCashContext
-(instancetype)initWithCashType:(HCDCashType)type{
self = [super init];
if (self) {
if (type == CashTypeNormal) {
self.cashSuper = [[HCDCashNormal alloc]init];
}else if(type == CashTypeRobate){
self.cashSuper = [[HCDCashRobate alloc]initWithMoneyRebate:0.8];
}else if(type == CashTypeReturn){
self.cashSuper = [[HCDCaseReturn alloc]initWithMoneyReturn:5];
}
}
return self;
}
-(CGFloat)getResult:(CGFloat)money{
return [self.cashSuper acceptCash:money];
}
@end
HCDCashContext *context = [[HCDCashContext alloc]initWithCashType:CashTypeNormal]
NSLog(@"结果是%f",[context getResult:100])
HCDCashContext *contextReturn = [[HCDCashContext alloc]initWithCashType:CashTypeReturn]
NSLog(@"结果是%f",[contextReturn getResult:100])
HCDCashContext *contextRobate = [[HCDCashContext alloc]initWithCashType:CashTypeRobate]
NSLog(@"结果是%f",[contextRobate getResult:100])
- 总结其实就是 利用不同的枚举做不同的事情,只是我们不在关注里面具体怎么做了。
参考文章