OCP设计原则

        所谓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];
        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数组中就可以添加成功。可见协议的采用增强了程序的可扩展性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值