标签:
复合 composition
object-c中,复合是通过包含作为实例变量的对象指针实现的。严格的说,只有对象间的组合叫复合。
以汽车模型为例,1辆汽车(Car)需要1台发动机(Engine)和4个轮胎(Tire),这里不去研究真正的轮胎和发动机的物理模型,而仅包含方法的类来输出各自代表的含义:轮胎的对象说它们是轮胎,发动机的对象说它们是发动机。
1 @interface Car : NSObject 2 { 3 Engine *engine; 4 Tyre *tire; 5 } 6 @end //Car
以上代码可以看出,engine和tire是通过复合的方式组成Car。
1 @interface Engine : NSObject 2 @end //Engine 3 4 @implementation Engine 5 -(NSString)Descroption 6 { 7 return (@"I am engine. Vroom"); 8 } //description 9 @end //Engine
Engine类只有一个description方法
1 @interface Car : NSObject 2 { 3 Engine *engine; 4 Tire *tires[4]; 5 } 6 -(void)print; 7 @end//Car
Car 拥有engine对象和一个由4个tire对象组成的数组,通过复合的方式组装自己,Car同时还有一个print方法,该方法使用NSLog()来输出轮胎和发动机的描述。
因为engine和tires是Car的实例变量,所以它们是复合的。
下面我们来看看Car的实现:
1 @implementation Car 2 -(id)init 3 { 4 if(self = [super init]){ 5 engine = [engine new]; 6 tires[0] = [Tire new]; 7 tires[1] = [Tire new]; 8 tires[2] = [Tire new]; 9 tires[3] = [Tire new]; 10 } 11 return(self); 12 }//init
1 -(void)print 2 { 3 NSLog(@"%@",engine); 4 NSLog(@"%@",tires[0]); 5 NSLog(@"%@",tires[1]); 6 NSLog(@"%@",tires[2]); 7 NSLog(@"%@",tires[3]); 8 }//print 9 @end//Car
print是通过NSlog
1 int main (int argc,const char *argv[]) 2 { 3 Car *car; 4 car = [Car new]; 5 [car print]; 6 return(0); 7 }//main
运行程序后输出:
标签:
原文地址:http://www.cnblogs.com/sallyWei/p/4451938.html