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];
        [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

OCP设计原则的相关文章

设计原则之开放闭合原则(OCP)

在<敏捷软件开发-原则.模式与实践>一书中,对开放闭合原则的定义为: 软件实体(类.模块.函数等)应该是可以扩展的,但是不可以修改. 简言之,两个特征: 1.对于扩展是开放的: 2.对于修改是关闭的 这两点特征貌似自相矛盾,怎么样在不改动模块源码的情况下去更改他的行为呢?如果不更改一个模块,又怎么能够去改变它的功能呢? 答案很简单,就是抽象.模块可能对抽象体进行操作.由于模块依赖于一个固定的抽象体,所以他对于更改可以是封闭的.同时,通过从这个抽象体去派生,可以扩展此模块的行为. 在设计原则开篇

面向对象设计原则

七大原则:开闭原则.里氏代换原则.依赖倒转原则.合成/聚合复用原则.迪米特法则.接口隔离原则,单一职责原则. 开闭原则是面向对象的可复用的基石.其他六种原则是手段和工具. 各规则详细(本部分为转载) http://kb.cnblogs.com/page/214010/ 正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石.其他设计原则(里氏代换原则.依赖倒转原则.合

设计模式之设计原则学习

设计模式的设计原则包含了:单一职责原则.里氏替换原则.依赖倒置原则.接口隔离原则.迪米特法则和开闭原则等6大原则. 单一职责原则(Single Responsibility Principle,简称SRP),英文介绍为:There should never be more than one reason for a class to change,即一个类,应当只有一个引起它变化的原因.单一职责原则,要求对象不能承担太多的职责,充分保证对象的高内聚.单一职责的优点有:1.降低了类的复杂性:2.提

主流MVC框架的设计模式及遵守的软件设计原则

原文地址,会不断更新  http://it.zuocheng.net/mvc-design-pattern-design-principle-summary   作程的技术博客 本文以主流的MVC框架为例,比如Java 的SSH.PHP的Symfony和Zend Framework ,在简单地剖析他们的设计原理之后,找到其中使用的设计模式:鉴赏他们的代码实现,查看设计者们都遵守了哪些软件设计原则.作此文,一为学习,二为总结.其中下面所写内容可能并不全面,也可能不准确,但会不断修改完善. 框架模式

第二章 【面向对象设计原则】

(一)如何衡量软件设计的质量 内聚度: 表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关.(好的软件设计应该做到高内聚.) 耦合度: 耦合度表示类之间关系的紧密程度.低耦合是指尽量使用抽象耦合,少用具体耦合. 设计原则名称 设计原则简介 重要性 单一职责原则 的职责要单一,不能将太多的职责放在一个类中. ★★★★☆ 开闭原则 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能.  ★★★★★ 历史替换原则 在软件系统中,一个可

*javascript开发的设计原则和设计模式

 设计原则(7种):   之所以有这么多的原则来指导我们进行程序的设计和开发,是因为我们的程序存在未知的改变.为了以最低的代价拥抱这种未知的变化,前辈们给我们总结了这么多原则. ①YAGNI原则you aren't gonna need it 不要写不需要的代码 ②KISS原则keep it simple and stupid代码保持简介和具有表现力语义话的标记.注释.变量或者方法的命名.减少嵌套 ③DRY原则Don't Repeat Yourself模块的封装提高代码的复用率 降低测试难度 方

java设计原则:16种原则

一   类的设计原则   1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed Principle (OCP) 二  包的设计原则   6

面向对阿象设计原则

如何衡量软件设计质量1 首要的标准 满足软件的功能需求 满足软件功能需求的设计并不一定就是好的设计. 好的设计 可读性:软件的设计文档是否轻易被其他程序员理解.可读性差的设计会给大型软件的开发和维护过程带来严重的危害. 可复用性:软件系统的架构.类.组件等单元能否很容易被本项目的其它部分或者其它项目复用. 可扩展性:软件面对需求变化时,功能或性能扩展的难易程度. 可维护性:软件维护(主要是指软件错误的修改.遗漏功能的添加等)的难易程度. 上面四个标准太抽象了,无法考量 内聚度 耦合度 什么是内聚

面象对象设计原则简介

一.面向对象设计原则 单一职责原则(SRP) 开闭原则(OCP) 里氏替换原则(LSP) 依赖倒置原则(DIP) 接口隔离原则(LSP) 迪米特原则(LOP) 组合/聚合复用原则(CARP) 二.单一职责原则(SRP) 定义:系统中每一个类都应该中有一个职责 优点:高内聚.低耦合 高内聚是指一个类或者功能模块由相关性很强的代码组成,类或者模块很难拆分,它只负责一项任务 耦合指的是类之间或模块之间的相互联系,耦合度越高,说明联系越紧密,独立性越差,我们越难拆分相反,耦合度越低,联系越松散独立性越好