1. 程式人生 > >c++面試題(設計模式篇)

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();