首页 > 代码库 > OCP设计原则
OCP设计原则
所谓OCP设计原则就是Open Close Principle,即开闭原则。指软件的结构对扩展是开放的,对修改是关闭的。现有的软件结构可以无限制的扩展,而不能修改现有结构。
为达到OPC设计原则,就要将软件抽象,把软件的公共部分抽象出接口,然后其他类可以实现或依赖该接口。
以人养宠物为例。一个人养很多宠物,我们若直接让人和宠物直接关联起来,以后再增加一个宠物时代码中很多的地方都得做出修改。较好的方法是:抽象出一个接口Pet,让不同的宠物去继承并实现该接口,人与这个接口相关联。
1.抽象出一个Pet协议
@protocol Pet <NSObject> @property(strong, nonatomic)NSString *name; @end2.分别建立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; @end4.实现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]; cat.name=@"花花猫"; id<Pet> dog=[[Dog alloc]init]; dog.name=@"旺财狗"; Person *per= [[Person alloc]init]; per.name=@"小李"; NSMutableArray *pets=[NSMutableArray arrayWithCapacity:2]; [pets addObject:cat]; [pets addObject:dog]; per.pets=pets; [per display]; } }每当有新的宠物类时我们只需要继承自Pet协议并实现该协议,生成新类的对象并加入到NSMultable数组中就可以添加成功。可见协议的采用增强了程序的可扩展性。
OCP设计原则
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。