zl程序教程

您现在的位置是:首页 >  其他

当前栏目

设计模式之策略设计模式

设计模式 策略
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];

@end
4.调用


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,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.