Foundation 或 UIKit 组合示例

Foundation or UIKit example of composition

我正在努力更好地理解构图的设计原则。 UIKit 或 Foundation 框架中是否有这方面的示例?

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKit_Framework/

根据我的经验,在明确考虑这个问题之前,似乎继承是这两个框架的主要模式。

也许我答错了你的问题,但也许这就是你要找的:

https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW15

这里是关于 SO 的模拟问题:

What Design Patterns are used on iOS other than MVC?

下面是对模式的很好的描述,或许可以让您更好地了解它:

http://sourcemaking.com/design_patterns/composite

继承在 Foundation 中很少见,也不是 UIKit 的主要模式。在这两种情况下,组合都更为常见。

继承和组合之间的区别通常表示为 IS-A 与 HAS-A。 IS-A 的方法是子类化。 HAS-A 方法是委托。

考虑一个您希望只接受特定字符的文本字段。在 IS-A 风格中,您将继承 UITextField。这在 iOS 中并不常见。相反,您传递一个委托(任何符合 <UITextFieldDelegate> 的东西),文本字段在需要时查询它。这是一种 HAS-A 方法。文本字段 "has a" 委托。

考虑 UITableView。您想制作 table 首歌曲。在 IS-A(继承)方法中,您将 UITableView 子类化并创建 SongsTableView。在 HAS-A(组合)方法中,您将创建一些其他对象(SongsDataSource)并将其提供给 UITableView。在这种情况下,UIKit 会同时使用两者;您给 UITableView 一个数据源,但该数据源通常(但不是必须)是 UITableViewController.

的子类

类似地,虽然子类化 UIViewCALayer 有点常见,但使用 "stock" 视图和图层并通过添加子类来构建它们也很常见组件。这就是 HAS-A 方法。

Foundation 中几乎没有 IS-A。除了 NSObject 之外,您很少对 Foundation 类 进行子类化。考虑 NSAttributedString。它不子类 NSString。它 一个 NSString。这是 Foundation 中通常的做事方式。您几乎从不创建自己的 NSStringNSArrayNSDateNSNumber 的子 类 或 Foundation 之外的任何其他常见类型。你把它们结合起来。