最近新工作太忙了,好久沒有寫博客了,經過一段時間的編碼,發現自己寫的代碼真的是太差勁了,難維護,擴展性低,重復代碼過多。自己分析分析總結一下,發現是自己缺少了一項優秀程序員的技能--設計模式,所以最近打算充充電,和大家一起學習一下設計模式,有問題之處請大家指點一二。
轉載請注明出處:http://blog.csdn.net/developer_zhang
在學習面向對象之前,我們來一起溫習一下面向對象的基礎知識吧:
在面向對象設計模式中,類與類之間主要有5種關系,他們分別是:依賴、關聯、聚合、組合、繼承。他們的耦合度依次增強。


依賴關系的定義為:對於兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現為依賴關系。定義比較晦澀難懂,但在面向對象中的表現還是比較直觀的:類A當中使用了類B,其中類B是作為類A的方法參數、方法中的局部變量、或者靜態方法調用。類上面的圖例中:People類依賴於Book類和Food類,Book類和Food類是作為類中方法的參數形式出現在People類中的。
代碼實例:
#import "People.h"
@implementation People
//Book作為read方法的形參
-(void)read:(Book*) book{
NSLog(@"讀的書是:%@",book.name);
}
@end
、
、
單向關聯:
雙向關聯:

對於兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。關聯關系分為單向關聯和雙向關聯。在java中,單向關聯表現為:類A當中使用了類B,其中類B是作為類A的成員變量。雙向關聯表現為:類A當中使用了類B作為成員變量;同時類B中也使用了類A作為成員變量。
代碼實例:
#import "Father.h"
@implementation Father
@synthesize name;
@synthesize son;
-(Father*)init
{
self=[super init]; //先使用父類方法進行初始化
if (self!=nil) {
son = [[Son alloc] init];
}
return self;
}
@end
#import "Son.h"
#import "Father.h"
@implementation Son
@synthesize name;
@synthesize father;
-(Son*)init
{
self=[super init]; //先使用父類方法進行初始化
if (self!=nil) {
// father = [[Father alloc] init];
}
return self;
}
@end

代碼實例:
#import "People.h"
@implementation People
@synthesize car;
-(void)setCar:(Car *)inputCar
{
self.car = inputCar;
}
-(void)drivingCar
{
NSLog(@"車的型號是%@",car.type);
}
@end

代碼實例:
//組合
@synthesize body;
-(People*)init
{
self = [super init];
if (self!=nil) {
body = [[Body alloc] init];
}
return self;
}
-(void)eat
{
NSLog(@"吃飯用身體:%@",body.name);
}

繼承代碼比較簡單,這裡就不附加代碼了。
代碼下載地址:http://download.csdn.net/detail/u010013695/6942183
以上就是設計模式基礎知識的所有內容,歡迎大家共同切磋交流,一起進步,十分感謝!