Objective-c里氏对换原则与开闭原则

来源:互联网 发布:javascript 定义数组 编辑:程序博客网 时间:2024/06/04 14:15

Objective-c中的开闭原则和里氏代换原则:

开闭原则是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。开闭原则的核心是:对扩展开放,对修改关闭。白话意思就是我们改变一个软件时(比如扩展其他功能),应该通过扩展的方式来达到软件的改变,而不应该修改原有的代码来实现变化。
里氏代换原则是面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以实现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
附上多态调用的例子:

 #import <Foundation/Foundation.h>

@interface Animal : NSObject
-(void)eat;
@end
#import “Animal.h”

@implementation Animal
- (void)eat{
NSLog(@”动物吃东西了!”);

}
@end

#import "Animal.h"

@interface Cat : Animal

@end

#import “Cat.h”

@implementation Cat
- (void)eat{
[super eat];
NSLog(@”猫吃鱼!”);
}

@end

#import “Animal.h”

@interface Dog : Animal

@end

#import “Dog.h”
@implementation Dog
- (void)eat{
[super eat];
NSLog(@”狗吃肉!”);
}
@end
//不知为何框架头文件无法导入。

#import “Animal.h”
@interface Student : NSObject
@property (retain,nonatomic)NSString *name;
@property (assign,nonatomic)NSInteger age;
- (void)feed:(Animal *)animal;//喂养动物的方法;

@end

#import “Student.h”
@implementation Student
- (void)setName:(NSString *)name{
_name = name;
NSLog(@”his name is %@;”,_name);
}

-(void)setAge:(NSInteger)age{
if (age <= 18) {
_age = 18;
}else _age = 22;
NSLog(@”his age is %ld;”,_age);
}
- (void)feed:(Animal *)animal{
NSLog(@”学生喂动物了!”);
[animal eat];
}
@end
//不知为何框架头文件无法导入。
#import “Student.h”
//#import “Animal.h”
#import “Dog.h”
#import “Cat.h”

int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *stu = [Student new];
[stu setAge:12];
[stu setName:@”fadykeane”];
Animal *d = [Dog new];
Animal *c = [Cat new];
[stu feed:d];
[stu feed:c];
}
return 0;
}
运行结果:
2015-07-29 10:04:45.996 里氏替换原则[637:20308] his age is 18;
2015-07-29 10:04:45.997 里氏替换原则[637:20308] his name is fadykeane;
2015-07-29 10:04:45.998 里氏替换原则[637:20308] 学生喂动物了!
2015-07-29 10:04:45.998 里氏替换原则[637:20308] 动物吃东西了!
2015-07-29 10:04:45.998 里氏替换原则[637:20308] 狗吃肉!
2015-07-29 10:04:45.998 里氏替换原则[637:20308] 学生喂动物了!
2015-07-29 10:04:45.998 里氏替换原则[637:20308] 动物吃东西了!
2015-07-29 10:04:45.998 里氏替换原则[637:20308] 猫吃鱼!

0 0
原创粉丝点击