设计模式:一套被反复使用的面向对象的结构,前辈们代码设计经验的总结,能使代码更容易复用、维护以及扩展。
常用设计模式
单例模式:
#include<iostream>
#include<pthread.h>
//pthread.h为linux库,需要在window上运行VS的请参考https://blog.youkuaiyun.com/wufuhuai/article/details/79771428?utm_source=blogxgwz7
//高版本的VS建议直接使用<mutext>库中的锁方法
using namespace std;
class TestInstance{
private:
static TestInstance* instance;
static pthread_mutex_t mutex;
TestInstance(){
ptread_mutex_init(&mutex);
};
public:
static TestInstance* GetTestInstance();
};
TestInstance* TestInstance:: GetTestInstance(){
if (instance == NULL)
{
pthread_mutex_lock(&mutex);
if(instance == NULL){
instance = new TestInstance();
}
pthread_mutex_unlock(&mutex);
}
return instance;
}
TestInstance* TestInstance::instance = NULL;//类中的静态成员一定要初始化,编译时分配内存
pthread_mutex_t TestInstance::mutex = {0};
2)观察者模式:
#include<iostream>
#include <vector>
#include <string>
using namespace std;
class observer{
public:
virtual void update() = 0;
};
class subject{
private:
vector<observer*> ObserverList;
public:
void Attach(observer* Observer){
ObserverList.push_back(Observer);
}
void Detach(observer* Observer){
}
void Notify(){
vector<observer*>::iterator iter = ObserverList.begin();
for (;iter != ObserverList.end();iter++)
{
(*iter)->update();
}
}
};
class Teacher : public subject{
public:
string name;
string state;
Teacher(string name1 = "",string state1= ""):name(name1),state(state1){};
};
class Astudent:public observer{
public:
Teacher* teacher;
Astudent(Teacher* teacher1):teacher(teacher1){};
void update();
};
void Astudent::update(){
cout<<teacher->name << "is "<<teacher->state<<" Astudent stop playing iphone"<<endl;
}
class Bstudent:public observer{
public:
Teacher* teacher;
Bstudent(Teacher* teacher1):teacher(teacher1){};
void update(){
cout<<teacher->name<< "is "<<teacher->state<<"Bstudent stop eating"<<endl;
}
};
void main(){
Teacher Lihua("lihua");
Bstudent b(&Lihua);
Astudent a(&Lihua);
observer* Bobserver = &b;
observer* Aobserver = &a;
Lihua.Attach(Aobserver);
Lihua.Attach(Bobserver);
Lihua.state = "coming";
Lihua.Notify();
getchar();
return;
}
https://www.runoob.com/design-pattern/decorator-pattern.html