设计模式
2018-09-16 本文已影响4人
小凡凡520
代理模式
当一个类的某些功能需要由别的类来实现、但是又不确定具体会是哪个类实现。
有两个主体:委托者(方法调用者)、代理者(方法实现者)。
观察者模式
观察者注册自己感兴趣的事件、被观察者不需要知道观察者的存在。
- 通知
UIKeyboardWillShowNotification、UIKeyboardWillHideNotification - KVO
键值观察
单例模式
主要用于共享资源、并且确保该实例只被初始化一次。
工厂模式
专门定义一个类来负责创建其他类的实例、被创建的实例常常具有共同的父类(基于多态)。
工厂模式分为三种:简单工厂模式、工厂模式、抽象工厂模式。
-
简单工厂模式
由一个工厂类、根据传入的参数(通常是枚举)、动态的决定创建出哪一个产品类的实例。//AnimalHouse + (Animal *)animalWithType:(AnimalType)type { Animal *animal = nil; if (type == AnimalTypeDog) {//狗 animal = [[Dog alloc] init]; } else if (type == AnimalTypeCat) { animal = [[Cat alloc] init]; } else if (type == AnimalTypeSheep) { animal = [[Sheep alloc] init]; } return animal; } Animal *dog = [AnimalHouse animalWithType:AnimalTypeDog]; [dog shout]; Animal *cat = [AnimalHouse animalWithType:AnimalTypeCat]; [cat shout]; Animal *sheep = [AnimalHouse animalWithType:AnimalTypeSheep]; [sheep shout];
-
工厂模式
相比简单工厂、将《工厂》也进行抽象处理。//DogHouse + (Animal *)animal { Animal *animal = [[Dog alloc] init]; return animal; } Animal *dog = [DogHouse animal]; [dog shout]; Animal *cat = [CatHouse animal]; [cat shout]; Animal *sheep = [SheepHouse animal]; [sheep shout];
-
抽象工厂模式
与工厂模式的基本模式相同。最大的区别就是工厂实例不在只生产一种产品、而是生产一个产品族。//AnimalHouse + (AnimalHouse *)houseWithType:(AnimalType)type { AnimalHouse *house = nil; if (type == AnimalTypeDog) {//狗 house = [[DogHouse alloc] init]; } else if (type == AnimalTypeCat) { house = [[CatHouse alloc] init]; } else if (type == AnimalTypeSheep) { house = [[SheepHouse alloc] init]; } return house; } //内部生成具体工厂`DogHouse ` // AnimalHouse *animalHouse = [AnimalHouse houseWithType:AnimalTypeDog]; //或者也可以直接使用具体工厂 AnimalHouse *animalHouse = [[DogHouse alloc] init]; //内部生成具体产品`MaleDog` MaleAnimal* maleAnimal = [animalHouse maleAnimal]; //内部生成具体产品`femaleDog` FemaleAnimal* femaleAnimal = [animalHouse femaleAnimal]; //使用该产品 [maleAnimal shout]; [femaleAnimal shout];