zhaoming 发表于 2015-11-8 13:40:30

OCP设计原则

  所谓OCP设计原则就是Open Close Principle,即开闭原则。指软件的结构对扩展是开放的,对修改是关闭的。现有的软件结构可以无限制的扩展,而不能修改现有结构。
  为达到OPC设计原则,就要将软件抽象,把软件的公共部分抽象出接口,然后其他类可以实现或依赖该接口。
  以人养宠物为例。一个人养很多宠物,我们若直接让人和宠物直接关联起来,以后再增加一个宠物时代码中很多的地方都得做出修改。较好的方法是:抽象出一个接口Pet,让不同的宠物去继承并实现该接口,人与这个接口相关联。
  1.抽象出一个Pet协议
  @protocol Pet <NSObject>
@property(strong, nonatomic)NSString *name;
@end
       2.分别建立Cat、Dog都实现该协议
  #import &quot;Pet.h&quot;
@interface Cat : NSObject<Pet>
@property(nonatomic, strong)NSString *name;
@end
#import &quot;Pet.h&quot;
@interface Dog : NSObject<Pet>
@property(strong, nonatomic)NSString *name;
@end

      3.使Person类依赖宠物集合数组
  #import &quot;Pet.h&quot;
@interface Person : NSObject
@property(strong, nonatomic)NSString *name;
@property(strong,nonatomic)NSMutableArray *pets;
-(void)display;
@end       4.实现Person类的display方法
  #import &quot;Person.h&quot;
@implementation Person
-(void)display
{
for (id<Pet> pet in self.pets ) {
NSLog(@&quot;%@ &quot;,pet.name);
}
}
@end
//id<Pet> pet表示pet是一个id类型的对象,并且它遵从Pet这个协议
      5.程序测试
  #import <Foundation/Foundation.h>
#import &quot;Pet.h&quot;
#import &quot;Cat.h&quot;
#import &quot;Dog.h&quot;
#import &quot;Person.h&quot;
int main()
{
@autoreleasepool {
id<Pet> cat = [init];
cat.name=@&quot;花花猫&quot;;
id<Pet> dog=[init];
dog.name=@&quot;旺财狗&quot;;
Person *per= [init];
per.name=@&quot;小李&quot;;
NSMutableArray *pets=;
;
;
per.pets=pets;
;
}
}       每当有新的宠物类时我们只需要继承自Pet协议并实现该协议,生成新类的对象并加入到NSMultable数组中就可以添加成功。可见协议的采用增强了程序的可扩展性。





版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: OCP设计原则