Head First设计模式—策略模式
来源:互联网 发布:javascript异步编程 编辑:程序博客网 时间:2024/05/20 11:27
这是我自己用Objective-c重写Head-First设计模式中第一章策略模式,直接上代码吧:
FlyBehavior.h fly协议实现:
#import <Foundation/Foundation.h>
@protocol FlyBehavior <NSObject>
- (void)fly;
@end
#import <Foundation/Foundation.h>
@protocol QuackBehavior <NSObject>
- (void)quack;
@end
#import <Foundation/Foundation.h>
#import "FlyBehavior.h"
#import "QuackBehavior.h"
@interface Duck : NSObject{
id<FlyBehavior> flyBehavior;
id<QuackBehavior> quackBehavior;
}
- (void)swim;
- (void)display;
- (void)performQuack;
- (void)performFly;
- (void)setFlyBehavior:(id<FlyBehavior>)fb;
- (void)setQuackBehavior:(id<QuackBehavior>)qb;
@end
Duck类的实现:
#import "Duck.h"
@implementation Duck
- (void)swim{
NSLog(@"I can swimming");
}
- (void)display{
NSException *myException = [NSException
exceptionWithName:@"Method not override exception"
reason:@"display method must be override"
userInfo:nil];
@throw myException;
}
- (void)performQuack{
[quackBehavior quack];
}
- (void)performFly{
[flyBehavior fly];
}
- (void)setFlyBehavior:(id<FlyBehavior>)fb{
flyBehavior = fb;
}
- (void)setQuackBehavior:(id<QuackBehavior>)qb{
quackBehavior = qb;
}
@end
flynoway头文件和实现:
#import <Foundation/Foundation.h>
#import "FlyBehavior.h"
@interface FlyNoWay : NSObject<FlyBehavior>
- (void)fly;
@end
#import "FlyNoWay.h"
@implementation FlyNoWay
- (void)fly{
NSLog(@"I can't fly");
}
@end
#import <Foundation/Foundation.h>
#import "FlyBehavior.h"
@interface FlyWithWings : NSObject<FlyBehavior>
- (void)fly;
@end
#import "FlyWithWings.h"
@implementation FlyWithWings
- (void)fly{
NSLog(@"I'm flying!");
}
@end
#import <Foundation/Foundation.h>
#import "FlyBehavior.h"
@interface FlyRocketPowered : NSObject<FlyBehavior>
- (void)fly;
@end
#import "FlyRocketPowered.h"
@implementation FlyRocketPowered
- (void)fly{
NSLog(@"I'm flying with a rocket");
}
@end
#import <Foundation/Foundation.h>
#import "QuackBehavior.h"
@interface MuteQuack : NSObject<QuackBehavior>
- (void)quack;
@end
#import "MuteQuack.h"
@implementation MuteQuack
- (void)quack{
NSLog(@"MuteQuack");
}
@end
#import <Foundation/Foundation.h>
#import "QuackBehavior.h"
@interface Quack : NSObject<QuackBehavior>
- (void)quack;
@end
#import "Quack.h"
@implementation Quack
- (void)quack{
NSLog(@"Quack");
}
@end
#import <Foundation/Foundation.h>
#import "QuackBehavior.h"
@interface
#import "Squeack.h"
Squeack类头文件和实现:
@implementation Squeack: NSObject<QuackBehavior>
- (void)quack;
@end
#import "Squeack.h"
@implementation Squeack
- (void)quack{
NSLog(@"Squeack");
}
@end
下面是Duck类的子类。
MallardDuck类头文件和实现:
#import "Duck.h"
@interface MallardDuck : Duck
- (id)init;
- (void)display;
@end
#import "MallardDuck.h"
#import "Quack.h"
#import "FlyWithWings.h"
@implementation MallardDuck
- (id)init{
if (self = [super init]) {
quackBehavior = [[Quack alloc] init];
flyBehavior = [[FlyWithWings alloc] init];
}
return self;
}
- (void)display{
NSLog(@"I'm a real Mallard duck");
}
@end
#import "Duck.h"
@interface ModelDuck : Duck
- (id)init;
- (void)display;
@end
#import "ModelDuck.h"
#import "FlyNoWay.h"
#import "Quack.h"
@implementation ModelDuck
- (id)init{
if (self = [super init]) {
flyBehavior = [[FlyNoWay alloc] init];
quackBehavior = [[Quack alloc] init];
}
return self;
}
- (void)display{
NSLog(@"I'm a model duck");
}
@end
主函数:
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Duck.h"
#import "MallardDuck.h"
#import "ModelDuck.h"
#import "FlyRocketPowered.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
Duck *mallard = [[MallardDuck alloc] init];
[mallard performQuack ];
[mallard performFly ];
Duck *model = [[ModelDuck alloc] init];
[model performFly];
[model setFlyBehavior:[[FlyRocketPowered alloc] init]];
[model performFly];
}
return 0;
}
图片是最后结果,这个实现比较简单,问题不大,有什么关于objective-c的问题,请留言交流。
——Rocky
- Head First设计模式—策略模式
- 《Head First 设计模式》模式1——策略模式
- Head First设计模式——策略设计模式
- Head First 设计模式 —— 策略设计模式
- 《head first 设计模式》之策略模式
- head first 设计模式:策略模式
- 策略模式 - head first设计模式
- Head First 设计模式第一章 ----策略模式
- 《Head First设计模式》策略模式
- Head First设计模式-策略模式
- 【Head First设计模式】策略模式
- 《Head First 设计模式》策略模式
- 《Head First设计模式》之策略模式
- Head First 设计模式:1策略模式
- 《Head First 设计模式》之策略模式
- <Head First 设计模式>:策略模式--Duck
- 【Head First设计模式-读书笔记】策略模式
- Head First设计模式---策略、观察者模式
- 已知二叉树的前序和中序序列,不建立二叉树来输出后序序列
- MySQL学习笔记(四)--常用函数
- Hive笔记七:Hive的数据导出
- session缓存时间的两种设置方式
- 海量数据挖掘MMDS week2: LSH的距离度量方法
- Head First设计模式—策略模式
- 解决 IDEA 中src下xml等资源文件无法读取的问题
- HDU 5496 - Beauty of Sequence (序列 + 统计贡献)
- Java对象在JVM中的生命周期
- 133 Clone Graph [Leetcode]
- C语言——接口设计原则
- DOM 元素节点几何量与滚动几何量
- 【C++】c++写时拷贝Copy On Write
- [经济学原理|政治部分]社会资本再生产理论