91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java設計模式中策略模式的示例分析

發布時間:2021-07-19 13:08:48 來源:億速云 閱讀:178 作者:小新 欄目:開發技術

小編給大家分享一下java設計模式中策略模式的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    策略模式

    策略模式(Strategy Pattern)屬于行為型模式,指對象有某個行為,但是在不同的場景中,該行為有不同的實現算法。用算法族分別封裝起來,實現同一個接口,讓他們之間可以互相替換,讓算法的變化獨立于使用算法的客戶。

    • 主要解決:在有多種算法相似的情況下,使用 if…else 所帶來的復雜和難以維護。

    • 如何解決:將這些算法封裝成一個一個的類,任意地替換。

    • 何時使用:一個系統有許多許多類,而區分它們的只是他們直接的行為。

    使用場景:

    • 如果在一個系統里面有許多類,它們之間的區別僅在于它們的行為,那么使用策略模式可以動態地讓一個對象在許多行為中選擇一種行為。

    • 一個系統需要動態地在幾種算法中選擇一種。

    • 如果一個對象有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。

    優點缺點
    算法可以自由切換策略類會增多
    避免使用多重條件判斷所有策略類都需要對外暴露
    擴展性良好

    java設計模式中策略模式的示例分析

    • 環境類(Context):持有抽象策略類的引用,用來操作策略的上下文環境。

    • 抽象策略類(Strategy):策略的抽象類或接口,給出所需實現接口。

    • 具體策略類(ConcreteStrategy):具體的策略實現。

    Demo

    有幾種鵝:天鵝、野鵝、灰鵝,鵝有各種行為,如飛、游泳、叫等。

    假設天鵝灰鵝飛行能力一般,野鵝飛行能力優秀;天鵝野鵝游泳能力一般,灰鵝游泳能力優秀。

    首先看第一種方法:

    java設計模式中策略模式的示例分析

    這種方法固然可以實現目的,但問題顯而易見,子類過多覆蓋父類方法,代碼未復用,耦合度很高。使用策略模式,簡單來說,就是封裝子類行為成接口,父類包含該接口即可。

    java設計模式中策略模式的示例分析

    代碼:

    public interface FlyBehavior {
        void fly();
    }
    public class FlyGood implements FlyBehavior {
        @Override
        public void fly() {
            System.out.println("飛行能力優秀");
        }
    }
    public class FlyNormal implements FlyBehavior {
        @Override
        public void fly() {
            System.out.println("飛行能力一般");
        }
    }
    public interface SwimBehavior {
        void swim();
    }
    public class SwimGood implements SwimBehavior {
        @Override
        public void swim() {
            System.out.println("游得好");
        }
    }
    public class SwimNormal implements SwimBehavior {
        @Override
        public void swim() {
            System.out.println("游得一般");
        }
    }
    public abstract class Goose {
        //策略接口
        FlyBehavior flyBehavior;
        SwimBehavior swimBehavior;
        //其他屬性等...
        public void setFlyBehavior(FlyBehavior flyBehavior) {
            this.flyBehavior = flyBehavior;
        }
        public void setSwimBehavior(SwimBehavior swimBehavior) {
            this.swimBehavior = swimBehavior;
        }
    }
    public class Swan extends Goose{
        public Swan() {
            flyBehavior=new FlyNormal();
            swimBehavior=new SwimNormal();
        }
    }
    public class WildGoose extends Goose{
        public WildGoose() {
            flyBehavior=new FlyGood();
            swimBehavior=new SwimNormal();
        }
    }
    public class GreyGoose extends Goose{
        public GreyGoose() {
            flyBehavior=new FlyNormal();
            swimBehavior=new SwimGood();
        }
    }
    public class Client {
        public static void main(String[] args) {
            Swan swan=new Swan();
            swan.flyBehavior.fly();
            WildGoose wildGoose=new WildGoose();
            wildGoose.swimBehavior.swim();
            GreyGoose greyGoose=new GreyGoose();
            greyGoose.flyBehavior.fly();
            greyGoose.setFlyBehavior(new FlyGood()); //改變某個對象的行為
            greyGoose.flyBehavior.fly();
        }
    }

    運行結果:

    java設計模式中策略模式的示例分析

    看完了這篇文章,相信你對“java設計模式中策略模式的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    凌源市| 庆城县| 通化市| 竹山县| 建宁县| 中西区| 新兴县| 柳河县| 武隆县| 锡林郭勒盟| 永城市| 永济市| 怀宁县| 丹凤县| 九龙城区| 苍南县| 汝阳县| 丹寨县| 班玛县| 承德县| 泰来县| 乡宁县| 上蔡县| 嘉禾县| 崇信县| 增城市| 南城县| 曲沃县| 攀枝花市| 信宜市| 泊头市| 比如县| 宁国市| 河北省| 孟州市| 忻州市| 潮州市| 永年县| 三台县| 历史| 如东县|