1. 程式人生 > >Java 設計模式--策略模式

Java 設計模式--策略模式

  最近看Head Frist設計模式一書,對設計模式的一點記錄,供自己以後查閱,首先學習的是策略模式,策略模式的好處:策略模式的好處在於你可以動態的改變物件的行為
策略模式的設計原則:將一個類中經常改變或者可能要改變的部分提取出來作為一個介面,然後在類中宣告這個介面的例項,宣告方法可以改變這個例項,這樣類就可以呼叫實現這個介面類的方法。


就以書中例子說明:
     我們有父類鴨子(Duck),鴨子有很多,如正常的鴨子,橡皮鴨子,鴨子共同點:身體兩隻腿,顏色,行為(飛,叫),因為有些鴨子是會飛的,有些不會飛,有些會呱呱叫,有些會吱吱叫,那麼鴨子的行為就是變化的,因此我們抽取這些變化的部分作為介面。
飛行介面:
public interface IFly {
    public void fly();
}
叫介面:
public interface IQuack {
    public void quack();
}
父類Duck:
public abstract class Duck {
    private IFly mIFly;
    private IQuack mIQuack;
    public void setmIFly(IFly iFly)
    {
        mIFly=iFly;
    }
    public void setmIQuack(IQuack iQuack)
    {
        mIQuack=iQuack;
    }
    public void exectFly()
    {
        if(mIFly!=null)
            mIFly.fly();
    }
    public void exectQuack()
    {
        if(mIQuack!=null)
               mIQuack.quack();
    }
    public void body()
    {
        System.out.println("I have a body and two legs!");
    }
   
    public abstract void dispaly();
}
子類RedDuck:
public class RedDuak extends Duck {
    @Override
    public void dispaly() {
        System.out.println("I am red duck!");
    }
}
public class EraserDuck extends Duck {
    @Override
    public void dispaly() {
        System.out.println("I am yello duck!");
    }
}
fly行為類:
public class FlyByWings implements IFly {
    @Override
    public void fly() {
        System.out.println("fly by wings!");
    }
}
呱呱叫行為類:
public class GuaGua implements IQuack {
    @Override
    public void quack() {
        System.out.println("gua gua jiao!");
    }
}
吱吱叫行為類:
public class ZhiZhi implements IQuack {
    @Override
    public void quack() {
        System.out.println("zhi zhi jiao!");
    }
}






測試一下:
public static void main(String args[])


{
   Duck readDuck =new ReadDuck();
   readDuck.body();
readDuck.setmIFly(new FlyByWings ());
readDuck.setmIQuack(new GuaGua());
      readDuck.exectQuack();
      readDuck.exectFly();




      Duck  eraserDuck=new EraserDuck();  
      eraserDuck .body();
      eraserDuck.setQuack(new ZhiZhi());
      eraserDuck.exectQuack();
}
這樣我們可以動態的改變各種鴨子的行為,例如我們的RedDuck又會嘰嘰叫,這也說不準,那麼我們可以建立JiJi類實現IQuack
JiJi類實現quack方法,把這JiJi類傳給RedDuck例項,RedDuck就可以呼叫JiJi實現的quack()方法實現嘰嘰叫了。

相關推薦

Java 設計模式策略模式

ember edm 等級 dia span private edi concrete tin   在閻宏博士的《JAVA與模式》一書中開頭是這樣描述策略(Strategy)模式的:   策略模式屬於對象的行為模式。其用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的

Java設計模式----------策略模式

用戶 無法 提交 main 遊戲 抽象 可能 測試類 ide 以下內容來自HeadFIrst設計模式一書和http://www.cnblogs.com/xrq730/p/4906313.html的博文,作為自己的學習筆記總結如下。 HeadFirst設計模式一書在開篇就

java設計模式-策略模式

temp return private 數組排序 寫法 冒泡 有一種 eth RF 背景:將一個數組排序,並且打印; 1.下面使用選擇排序、和冒泡排序來寫:                         public class Test { public

Java常用設計模式——策略模式

nts static 管理 選擇 span disco rri contex 由於 策略模式定義了一系列的算法,並將每一個算法封裝起來,而且使它們還可以相互替換,策略模式讓算法獨立於使用它的客戶而獨立變化。策略模式使這些算法在客戶端調用它們的時候能夠互不影響地變化

Java 設計模式 - 策略模式

策略模式 定義一系列的演算法,把他們一個一個封裝起來, 是他們可以相互替換. 於是利用策略模式可以完成獨立於呼叫者而變化. UML圖示 將實際演算法封裝成一個一個的類,並讓這些類繼承同一個介面. 在呼叫者中宣告這個物件的引用, 同時在使用時根據具體情況, 選擇不同實現類完成對該

java設計模式--策略模式

1.策略模式的定義 策略模式屬於物件的行為模式。其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。   策略模式是對演算法的包裝,是把使用演算法的責任和演算法本身分割開來,

Java設計模式——策略模式實現及原理

簡介 定義 策略模式:將可變的部分從程式中抽象分離成演算法介面,在該介面下分別封裝一系列演算法實現。並使他們可以相互替換,從而導致客戶端程式獨立於演算法的改變。 策略模式中的設計原則:變化的抽象成介面;面向介面程式設計而不是面向實現程式設計。 原理 將有共性的行為抽象為一個

java設計模式-策略模式

一,定義:Strategy模式也叫策略模式是行為模式的一種,它對一系列的演算法加以封裝,為所有的演算法定義一個抽象的演算法介面,並通過繼承該抽象演算法介面對所有的演算法加以封裝和實現,具體的演算法選擇交有客戶端決定(策略)。Strategy模式主要有外部環境來決定演算法的切換。 二,結構:

java 設計模式 策略模式,comparable 介面,compareTo 方法

重點在於判斷 物件   誰大誰小 尤其是比較類物件的 “誰大誰小” 列印類物件 print(a) 必須在類裡要重寫 toString() 方法 @Overridepublic String toString(){return this.food+"";//後面那個雙引號是

Java 設計模式--策略模式

  最近看Head Frist設計模式一書,對設計模式的一點記錄,供自己以後查閱,首先學習的是策略模式,策略模式的好處:策略模式的好處在於你可以動態的改變物件的行為 策略模式的設計原則:將一個類中經常改變或者可能要改變的部分提取出來作為一個介面,然後在類中宣告這個介面的例

Java開發之設計模式--策略模式(Strategy Pattern)

模擬場景: 劉備要到江東娶老婆了,走之前諸葛亮給趙雲(伴郎)三個錦囊妙計,說是按天機拆開解決棘手問題,嘿,還別說,真是解決了大問題,搞到最後是周瑜陪了夫人又折兵呀,那咱們先看看這個場景是什麼樣子的。 先說這個場景中的要素:三個妙計,一個錦囊,一

java設計模式——策略模式

pri 新增 業務場景 map ace 的區別 提高 安全性 scrip 一. 定義與類型 定義:針對一組算法,將每一種算法都封裝到具有共同接口的獨立的類中,從而是它們可以相互替換。策略模式的最大特點是使得算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。當代碼中

java 設計模式-策略模式

12c str state app cts adf tro data- baidu 概念 將每一種算法都封裝到具有共同接口的獨立類中,從而使他們可以相互替換 特點功能特點: 算法在不影響客戶端運行的情況下發生變化,從而改變不同功能(不同算法邏輯)。 設計特點:

PHP設計模式-策略模式

行為 一個 文件 ech 策略 something protected this cte <?php//策略模式//將一組特定的算法或行為 封裝成一個類,以適應上下文環境//策略的接口文件 約定策略的行為 針對一種情況 產生具體的策略interface Policy

設計模式——策略模式

contex mas bob listbox inf items 收銀系統 setter .com 聲明:以下內容來源於《大話設計模式》,學習。 策略模式:定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。 商場收費策略:正

設計模式策略模式

onclick sea func cal sdn 不同的 memory hide http 參考http://blog.csdn.net/calmreason/article/details/51029285 定義一系列相同的算法 根據不同需求選擇不同的算法策略 代碼

C++設計模式——策略模式

code spa fine 技術分享 pin ati first virtual headfirst 模式定義:策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。 舉個例子來説,不同鴨子的行爲是不同的,我們可以把變化的行爲提

設計模式之——淺談strategy模式(策略模式)

兩個 事情 操作 none 要去 編碼 淺談 一點 進行 strategy模式,即策略模式。個人覺得吧,策略模式更多的是一種思維方式。 首先我們要知道,為什麽需要策略模式。舉個例子,比如用程序輸出今天下午去玩什麽。 PlayGame 玩遊戲 package site.wa

設計模式---策略模式

不同的 ext 減少 交互 運行時 系列 使用 增加 策略 策略模式:它定義算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。 Context(應用場景): 1. 需要使用ConcreteStrategy提供的算法。 2. 內部

(轉)設計模式——策略模式

提高 {} xiang 有一個 ble 問題 其它 add 新的 轉載地址:http://blog.csdn.net/lifuxiangcaohui/article/details/8065059 這篇文章講述的策略模式非常棒,在此轉載。 設計模式; 一個程序員對設計模