狀態會話Bean和無狀態會話Bean的區別

 

   今天看一個《head first design pattern》 書的第一章。發覺這本書真的和別人說的一樣的是一本好書呀。難怪獲得JOLT大獎。
      策略模式:就是把不變的東西封裝,把變的東西通過代理實現,下面的例子是原書的例子
  假設我們要設計一個鴨子游戲,那我們設計一個超類Duck
Duck 有這些屬性(是一個抽象類)
quack()
swim()
display()
// 外觀是綠頭 }// 鴨子的其他方法
          MallardDuck繼承了Duck  
       display() 
{
         
// 外觀是綠頭 }
    RedheadDuck繼承了Duck
     display() 
{
       
// 外觀是紅頭 }
由於某些原因要讓有的鴨子會叫和會飛,一開始想在Duck超類上添加fly()和quack();看上去好想沒有什麼問題,但是所有的鴨子都會fly()和quack()嗎?想想也是呀假鴨和聾啞就不會quack
而且每一隻鴨的fly和quack可能不一樣那麼怎麼解決了。引用策略模式():
   把fly的行爲封裝在FlyBehavior接口,同樣把quack的行爲封裝在QuackBehavior接口
public abstract class Duck {
  FlyBehavior fl yBehavior;
  QuackBehavior quackBehavior;
  
public Duck() {
}

  
public abstract void display();
  
public void performFly() {
  fl yBehavior.fl y();
}

  
public void performQuack() {
  quackBehavior.quack();
}

  
public void swim() {
   System.out.println(“All ducks fl oat, even decoys
!”);
}

}

  這裏用到了oo的多態
繼承Duck類的子類在實例化通過set##方法來把quackBehavior,QuackBehavior的實例動態加載
flybeh
  
 
FlyBehavior的行爲不一定只能給鴨,給雞給鳥呀QuackBehavior也是同樣的
上面的就是strategy pattern 
   其實我有個想法(實現上面的問題的方法):
public abstract class Duck {
   
public Duck() {
}

  
public abstract void display();
  
public adstract void performFly();
  
public abstarct void performQuack() ;
 
  
public void swim() {
   System.out.println(“All ducks fl oat, even decoys
!”);
}

}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章