在开发过程中,我们难免会遇到一些功能相近的需求,如果为此创建不同的类的话,我们工程里面就会有很多很多不必要的类,自己调用的时候也难免会分不清,这个时候我们可以尝试使用类簇的设计模式,来构建自己所需要类。
我们可以参考苹果的NSNumber类, [NSNumber numberWithInt:1]等等。这些方法都是用一些外部接口,在类内部的方法实施具体的实现,创建出不同的子类。这样的好处就是只需要调用一个类的响应方法就可以了。
以动物为例子
import UIKit
enum AnimalName : Int {
case Dog = 0
case Cat
}
class Animal: NSObject {
public class func animalWithName(_ animalName : AnimalName) -> Animal {
if animalName == AnimalName.Dog {
return Dog()
}
return Cat()
}
func run () {
print("animalRun")
}
}
class Dog : Animal {
override func run() {
print("dogRun")
}
}
class Cat : Animal {
override func run() {
print("catRun")
}
}
接下来再调用一下看看效果
func testCreatObjectWithClassCluster () {
let dog = Animal.animalWithName(.Dog)
let cat = Animal.animalWithName(.Cat)
dog.run()
cat.run()
}
dogRun
catRun