mirror of
https://github.com/huihut/interview.git
synced 2025-12-18 13:04:38 +03:00
添加设计模式及例子,包括:单例、抽象工厂、适配器、桥接、观察者模式
This commit is contained in:
34
DesignPattern/ObserverPattern/ObserverMain.cpp
Normal file
34
DesignPattern/ObserverPattern/ObserverMain.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// Created by xiemenghui on 2018/7/21.
|
||||
//
|
||||
|
||||
#include "ObserverMain.h"
|
||||
|
||||
void ObserverMain()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ConcreteSubject * pSubject = new ConcreteSubject();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>۲<EFBFBD><DBB2><EFBFBD>
|
||||
IObserver * pObserver1 = new ConcreteObserver("Jack Ma");
|
||||
IObserver * pObserver2 = new ConcreteObserver("Pony");
|
||||
|
||||
// ע<><D7A2><EFBFBD>۲<EFBFBD><DBB2><EFBFBD>
|
||||
pSubject->Attach(pObserver1);
|
||||
pSubject->Attach(pObserver2);
|
||||
|
||||
// <20><><EFBFBD>ļ۸<DBB8>֪ͨ<CDA8>۲<EFBFBD><DBB2><EFBFBD>
|
||||
pSubject->SetPrice(12.5);
|
||||
pSubject->Notify();
|
||||
|
||||
// ע<><D7A2>һ<EFBFBD><D2BB><EFBFBD>۲<EFBFBD><DBB2><EFBFBD>
|
||||
pSubject->Detach(pObserver2);
|
||||
|
||||
// <20>ٴθ<D9B4><CEB8><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>֪ͨ<CDA8>۲<EFBFBD><DBB2><EFBFBD>
|
||||
pSubject->SetPrice(15.0);
|
||||
pSubject->Notify();
|
||||
|
||||
SAFE_DELETE(pObserver1);
|
||||
SAFE_DELETE(pObserver2);
|
||||
SAFE_DELETE(pSubject);
|
||||
}
|
||||
17
DesignPattern/ObserverPattern/ObserverMain.h
Normal file
17
DesignPattern/ObserverPattern/ObserverMain.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// Created by xiemenghui on 2018/7/21.
|
||||
//
|
||||
|
||||
#ifndef DESIGNPATTERN_OBSERVERMAIN_H
|
||||
#define DESIGNPATTERN_OBSERVERMAIN_H
|
||||
|
||||
#include "concrete_subject.h"
|
||||
#include "concrete_observer.h"
|
||||
|
||||
#ifndef SAFE_DELETE
|
||||
#define SAFE_DELETE(p) { if(p){delete(p); (p)=nullptr;} }
|
||||
#endif
|
||||
|
||||
void ObserverMain();
|
||||
|
||||
#endif //DESIGNPATTERN_OBSERVERMAIN_H
|
||||
25
DesignPattern/ObserverPattern/concrete_observer.h
Normal file
25
DesignPattern/ObserverPattern/concrete_observer.h
Normal file
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// Created by xiemenghui on 2018/7/21.
|
||||
//
|
||||
|
||||
#ifndef DESIGNPATTERN_CONCRETE_OBSERVER_H
|
||||
#define DESIGNPATTERN_CONCRETE_OBSERVER_H
|
||||
|
||||
#include "observer.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
class ConcreteObserver : public IObserver
|
||||
{
|
||||
public:
|
||||
ConcreteObserver(std::string name) { m_strName = name; }
|
||||
void Update(float price)
|
||||
{
|
||||
std::cout << m_strName << " - price" << price << "\n";
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_strName; // 名字
|
||||
};
|
||||
|
||||
#endif //DESIGNPATTERN_CONCRETE_OBSERVER_H
|
||||
45
DesignPattern/ObserverPattern/concrete_subject.h
Normal file
45
DesignPattern/ObserverPattern/concrete_subject.h
Normal file
@@ -0,0 +1,45 @@
|
||||
//
|
||||
// Created by xiemenghui on 2018/7/21.
|
||||
//
|
||||
|
||||
#ifndef DESIGNPATTERN_CONCRETE_SUBJECT_H
|
||||
#define DESIGNPATTERN_CONCRETE_SUBJECT_H
|
||||
|
||||
#include "subject.h"
|
||||
#include "observer.h"
|
||||
#include <iostream>
|
||||
#include <list>
|
||||
|
||||
// 具体主题
|
||||
class ConcreteSubject : public ISubject
|
||||
{
|
||||
public:
|
||||
ConcreteSubject(){ m_fPrice = 10.0; }
|
||||
void SetPrice(float price)
|
||||
{
|
||||
m_fPrice = price;
|
||||
}
|
||||
void Attach(IObserver * observer)
|
||||
{
|
||||
m_observers.push_back(observer);
|
||||
}
|
||||
void Detach(IObserver * observer)
|
||||
{
|
||||
m_observers.remove(observer);
|
||||
}
|
||||
// 通知所有观察者
|
||||
void Notify()
|
||||
{
|
||||
std::list<IObserver *>::iterator it = m_observers.begin();
|
||||
while (it != m_observers.end())
|
||||
{
|
||||
(*it)->Update(m_fPrice);
|
||||
++it;
|
||||
}
|
||||
}
|
||||
private:
|
||||
std::list<IObserver *> m_observers; // 观察者列表
|
||||
float m_fPrice; // 价格
|
||||
};
|
||||
|
||||
#endif //DESIGNPATTERN_CONCRETE_SUBJECT_H
|
||||
15
DesignPattern/ObserverPattern/observer.h
Normal file
15
DesignPattern/ObserverPattern/observer.h
Normal file
@@ -0,0 +1,15 @@
|
||||
//
|
||||
// Created by xiemenghui on 2018/7/21.
|
||||
//
|
||||
|
||||
#ifndef DESIGNPATTERN_OBSERVER_H
|
||||
#define DESIGNPATTERN_OBSERVER_H
|
||||
|
||||
// 抽象观察者
|
||||
class IObserver
|
||||
{
|
||||
public:
|
||||
virtual void Update(float price) = 0; // 更新价格
|
||||
};
|
||||
|
||||
#endif //DESIGNPATTERN_OBSERVER_H
|
||||
18
DesignPattern/ObserverPattern/subject.h
Normal file
18
DesignPattern/ObserverPattern/subject.h
Normal file
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// Created by xiemenghui on 2018/7/21.
|
||||
//
|
||||
|
||||
#ifndef DESIGNPATTERN_SUBJECT_H
|
||||
#define DESIGNPATTERN_SUBJECT_H
|
||||
|
||||
class IObserver;
|
||||
|
||||
class ISubject
|
||||
{
|
||||
public:
|
||||
virtual void Attach(IObserver *) = 0; // 注册观察者
|
||||
virtual void Detach(IObserver *) = 0; // 注销观察者
|
||||
virtual void Notify() = 0; // 通知观察者
|
||||
};
|
||||
|
||||
#endif //DESIGNPATTERN_SUBJECT_H
|
||||
Reference in New Issue
Block a user