c++面試題(設計模式篇)
●觀察者模式:當物件間有一對多的依賴關係時,當一個物件的狀態發生改變時,所有依賴於它的物件都會得到通知並自動更新。
class Subject//被觀察者
{
Attach(Observer);//新增觀察者
Detach(Observer);//移除觀察者
Notify();//通知觀察者
list<Observer*> m_observers;//觀察者連結串列
}
class Observer//觀察者
{
Update();
}
●單例模式:一般情況下,我們建立的類有些是屬於工具性質的,所以不需要每次都去new一個物件,所以將預設的建構函式宣告為私有,給外面提供一個例項介面就行了。(可用全域性或靜態變數代替,但會影響封裝性)常和工廠模式結合使用,因為工廠只需要建立一個產品例項就可以了。
class Singleton
{
Singleton* GetInstance()
{
if(instance == NULL)
{
return new Singleton();
}
}
static Singleton* instance;
}
●工廠模式:主要是將建立物件的具體過程給封裝遮蔽起來,達到提高靈活性的目的。
使用理由:把物件建立集中一一個地方(工廠中),,否則到處都是物件建立邏輯,當物件建立方法改變時只需要改變工廠方法,不需要到處修改,維護量減少。
參與者
抽象產品角色(Product):定義產品的介面
具體產品角色(ConcreteProduct) :實現介面Product的具體產品類
抽象工廠角色(Factory):宣告工廠方法(CreateProduct),返回一個產品
真實的工廠(ConcreteFactory):實現CreateProduct工廠方法,由客戶呼叫,返回一個產品的例項.
Factory* pFactory= new ConcreteFactory();
Product* pProduct= pFactory->ConcreateProduct1();