gpt4 book ai didi

java - Objective-C 中的策略设计模式

转载 作者:行者123 更新时间:2023-11-30 11:01:35 24 4
gpt4 key购买 nike

我来自 Java,我正在重温 Head First Design Patterns 一书(根据一些开发人员的说法,这是设计模式的圣经)。我正在尝试通过将 Java 转换为 obj-c 来重新创建书中的 Duck Simulator,这是我目前所拥有的:

https://github.com/ZnelArts/IOSDesignPatterns/tree/master/DesignPatterns/Strategy/DuckSimulator

该模拟器使用通过协议(protocol)应用的策略模式。我的实现有 2 个问题:

1- 我不能像在 Java 版本中那样让 Duck 类是抽象的,在 Java 版本中,方法“display()”是抽象的,应该由子类实现。

2- 我必须公开 Duck 类属性以便子类可以访问它们,这不像在 Java 中子类可以看到私有(private)属性。

这个解决方案的理想设计是什么?

最佳答案

您走在正确的道路上,并且在练习中很好地识别了 Objective-C 语言的局限性。

Objective-C 缺少以下工具:

<强>1。拥有抽象方法

有一个解决抽象方法限制的方法;您可以为抽象方法实现调用 [doesNotRecognizeSelector:]

这是一个类层次结构的例子,其中基类是抽象的。更多详情可以看这个thread以及(谈论 Objective-C 中的模板设计模式)。

@interface Life : NSObject

- (void) goThroughTheDay;

- (void) goToWork; // Abstract
- (void) eatLunch; // Abstract
- (void) comeBackHome; // Abstract
- (void) programABitMore; // Abstract

@end

@implementation Life

- (void) goThroughTheDay {

[self goToWork];
[self eatLunch];
[self comeBackHome];
[self programABitMore];
}

- (void) goToWork { [self doesNotRecognizeSelector:_cmd]; }
- (void) eatLunch { [self doesNotRecognizeSelector:_cmd]; }
- (void) comeBackHome { [self doesNotRecognizeSelector:_cmd]; }
- (void) programABitMore { [self doesNotRecognizeSelector:_cmd]; }

@end

<强>2。拥有 protected 成员和方法

已经有好的了thread关于 Stackoverflow 上的这个,您可以检查一下。

关于java - Objective-C 中的策略设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com