工厂模式和观察者模式C++代码
时间: 2023-11-15 17:03:04 浏览: 37
工厂模式的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20];
int age;
} Person;
typedef struct {
Person *(*create)();
void (*destroy)(Person *);
} PersonFactory;
Person *create_person() {
Person *p = malloc(sizeof(Person));
p->age = 18;
return p;
}
void destroy_person(Person *p) {
free(p);
}
PersonFactory *create_person_factory() {
PersonFactory *factory = malloc(sizeof(PersonFactory));
factory->create = &create_person;
factory->destroy = &destroy_person;
return factory;
}
void destroy_person_factory(PersonFactory *factory) {
free(factory);
}
int main() {
PersonFactory *factory = create_person_factory();
Person *p = factory->create();
printf("Person name: %s, age: %d\n", p->name, p->age);
factory->destroy(p);
destroy_person_factory(factory);
return 0;
}
```
观察者模式的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
void (*notify)(int);
} Subject;
typedef struct {
int id;
void (*update)(int);
} Observer;
void notify_subject(Subject *subject) {
subject->notify(subject->value);
}
void update_observer(Observer *observer, int value) {
printf("Observer %d updated value: %d\n", observer->id, value);
}
Subject *create_subject() {
Subject *subject = malloc(sizeof(Subject));
subject->value = 0;
subject->notify = NULL;
return subject;
}
void destroy_subject(Subject *subject) {
free(subject);
}
Observer *create_observer(int id) {
Observer *observer = malloc(sizeof(Observer));
observer->id = id;
observer->update = &update_observer;
return observer;
}
void destroy_observer(Observer *observer) {
free(observer);
}
int main() {
Subject *subject = create_subject();
Observer *observer1 = create_observer(1);
Observer *observer2 = create_observer(2);
subject->notify = observer1->update;
notify_subject(subject);
subject->notify = observer2->update;
subject->value = 10;
notify_subject(subject);
destroy_observer(observer1);
destroy_observer(observer2);
destroy_subject(subject);
return 0;
}
```