Tôi đang cố gắng để tạo ra một nhà máy (design pattern) trong Objective C Vì vậy, tôi đang làm một cái gì đó như:Factory (design pattern) trong Objective C
+ (Car *)createCar:(int)color {
if (color == 1) {
return [CarFactory createBlueCar];
} else if (color == 2) {
return [CarFactory createRedCar];
} else {
return nil;
}
}
+ (Car *)createBlueCar {
// ...
}
+(Car*)createRedCar{
// ...
}
Tuy nhiên tôi không muốn createBlueCar
và createRedCar
có sẵn cho công chúng và nếu tôi không xác định chúng trong tệp .h
thì tôi sẽ nhận được cảnh báo về định nghĩa bị thiếu.
Tôi là một nhà phát triển Java cũ và một newbie trong Objective-C - Vì vậy, nó có thể chỉ là thực hành xấu Nếu vậy thực hành tốt là làm như thế.
Bạn thường không có các lớp Nhà máy trong Mục tiêu-C vì các lớp là đối tượng lớp đầu tiên. Nhìn vào các lớp Umbrella như NSPredicate hoặc NSNumber. Họ là những nhà máy. Bạn thường sẽ nhận được một lớp con của NSPredicate hoặc NSNumber được trả lại. –
Đồng ý với @AdamSmith, cách tốt nhất để làm điều đó sẽ là phương pháp lớp học trên Xe hơi, ví dụ: '+ (Car *) carWithColor: (int) color;' – dmur
Thực ra tôi nhận thấy một thứ khác có thể không rõ ràng khi bắt đầu từ Java. Nếu "createCar" là trên lớp thực hành tốt nhất CarFactory thường là viết [self createBlueCar]. Trong các lớp ObjC là các đối tượng không giống như Java. Vì vậy, tự trong một lớp học phương pháp đề cập đến các đối tượng lớp (CarFactory trong trường hợp này).Lý do sử dụng "tự" là mã sẽ không bị hỏng nếu bạn kế thừa "CarFactory" và thực hiện lại ví dụ: "createBlueCar" –