所谓OCP设计原则就是Open Close Principle,即开闭原则。指软件的结构对扩展是开放的,对修改是关闭的。现有的软件结构可以无限制的扩展,而不能修改现有结构。
为达到OPC设计原则,就要将软件抽象,把软件的公共部分抽象出接口,然后其他类可以实现或依赖该接口。
以人养宠物为例。一个人养很多宠物,我们若直接让人和宠物直接关联起来,以后再增加一个宠物时代码中很多的地方都得做出修改。较好的方法是:抽象出一个接口Pet,让不同的宠物去继承并实现该接口,人与这个接口相关联。
1.抽象出一个Pet协议
@protocol Pet <NSObject> @property(strong, nonatomic)NSString *name; @end
2.分别建立Cat、Dog都实现该协议
#import "Pet.h" @interface Cat : NSObject<Pet> @property(nonatomic, strong)NSString *name; @end
#import "Pet.h" @interface Dog : NSObject<Pet> @property(strong, nonatomic)NSString *name; @end
3.使Person类依赖宠物集合数组
#import "Pet.h" @interface Person : NSObject @property(strong, nonatomic)NSString *name; @property(strong,nonatomic)NSMutableArray *pets; -(void)display; @end
4.实现Person类的display方法
#import "Person.h" @implementation Person -(void)display { for (id<Pet> pet in self.pets ) { NSLog(@"%@ ",pet.name); } } @end //id<Pet> pet表示pet是一个id类型的对象,并且它遵从Pet这个协议
5.程序测试
#import <Foundation/Foundation.h> #import "Pet.h" #import "Cat.h" #import "Dog.h" #import "Person.h" int main() { @autoreleasepool { id<Pet> cat = [[Cat alloc]init]; [email protected]"花花猫"; id<Pet> dog=[[Dog alloc]init]; [email protected]"旺财狗"; Person *per= [[Person alloc]init]; [email protected]"小李"; NSMutableArray *pets=[NSMutableArray arrayWithCapacity:2]; [pets addObject:cat]; [pets addObject:dog]; per.pets=pets; [per display]; } }
每当有新的宠物类时我们只需要继承自Pet协议并实现该协议,生成新类的对象并加入到NSMultable数组中就可以添加成功。可见协议的采用增强了程序的可扩展性。
时间: 2024-10-09 21:27:40