美文网首页
[转]OC中用组合设计模式实现多继承

[转]OC中用组合设计模式实现多继承

作者: 疯狂的向日葵 | 来源:发表于2016-03-18 12:51 被阅读378次

我们都知道objective C不能像C++一样支持多继承,但是在OC的使用经常会碰到需要使用多继承的情况。例如,ClassA中有methodA,ClassB中methodB,而现在需要使用这两个类中的方法。如何按照C++的编程思路,毫无疑问采用多继承就搞定了,在OC就需要动动脑子了。
其实我们在学习设计模式的时候知道,多继承的效率不高,而且采用组合的模式可以完全代替继承模式。那么,这种思路完全可以用在OC中实现多继承(或许OC抛弃多继承,就是强迫我们使用更高效的组合设计模式吧!)。下面用实际的代码来表示组合如何来代替多继承。
现在ClassC需要继承ClassA中methodA、ClassB中methodB,具体的代码实现为:

  //定义ClassA以及其methodA

@interface ClassA : NSObject {
}

-(void)methodA;

@end
//定义ClassB以及其methodB
@interface ClassB : NSObject {
}

-(void)methodB;

@end
//定义ClassC以及其需要的methodA,methodB
@interface ClassC : NSObject {
  ClassA *a;
  ClassB *b;
}

-(id)initWithA:(ClassA *)A b:(ClassB *)B;

-(void)methodA;
-(void)methodB;

@end

//注意在ClassC的实现

@implementation  ClassC

-(id)initWithA:(ClassA *)A b:(ClassB *)B{

       a=[[ClassA alloc] initWithClassA: A];//[A copy];

       b=[[ClassB alloc] initWithClassB: B];//[B copy];

}

-(void)methodA{

      [a methodA];

}
-(void)methodB{

      [b methodB];

}  

上面是采用组合的方式实现了多继承的功能,解决了OC不能多继承的语法。那么还有其他的方式来实现多继承吗?
虽然OC在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单,具体的实现方式这里就不讲了!

相关文章

  • [转]OC中用组合设计模式实现多继承

    我们都知道objective C不能像C++一样支持多继承,但是在OC的使用经常会碰到需要使用多继承的情况。例如,...

  • Objective-C有多继承吗?没有的话用什么代替?

    OC没有多继承,通过设计模式实现多继承1.通过协议(protocol)实现,协议只能提供接口,不能提供实现方法缺点...

  • OC 委托模式

    委托模式是我们经常用到的设计模式,首先OC里面不支持多继承,那么我们想实现类似多继承的功能的时候,我们可能会想到委...

  • OC用组合实现多继承

    @implementation ClassA-(void)classAMethod{NSLog(@"AAAAAAA...

  • C++面向对象设计

    组合、委托、继承 一、composition(组合)has-a 1 组合关系(Adapter 设计模式) 关系: ...

  • IOS面试相关

    OC有多继承吗?没有的话用什么代替? OC中没有多继承,可以用委托代理Protocol来实现。 如果有多继承 “:...

  • HeadFirst设计模式-策略模式

    设计原则:1) 封装变化的部分 2) 针对接口编程,而不是针对实现变成 3)多用组合,少用继承 设计模式: 策略模...

  • 类别和延展

    类别和延展 OC中有多继承么,如果没有,用什么代替? OC不支持多继承,如果想要实现多继承的话,可以通过类别和协议...

  • ios学记0021-实现Java抽象类

    所谓编程不过是人类将思想翻译给机器去实现. 所谓设计模式, 编程模式都是几个概念不同组合罢了. 在使用OC后, 近...

  • 必须掌握的Golang23种设计模式之工厂方法模式

    工厂方法模式使用子类的方式延迟生成对象到子类中实现。 Go中不存在继承 所以使用匿名组合来实现 查看全部设计模式:...

网友评论

      本文标题:[转]OC中用组合设计模式实现多继承

      本文链接:https://www.haomeiwen.com/subject/enaclttx.html