一天学一个模式_第一天:策略模式
概念:
策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化。
???? (原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.)
抽象策略角色:
?????? 策略類,通常由一個接口或者抽象類實現。
步驟:
???? (①②步比較菜,忽略。有異議者聯系!)
????? ①首先定義一個策略接口
????? ②然后再寫出你需要的實現類(這里稱為“計謀”)去繼承①策略接口。
????? ③計謀有了,那還要有錦囊裝
?????? /**
??????? * @author wonter?
??????? * <b>描述:</b>計謀有了,那還要有錦囊裝 <br>
??????? * <b>郵件:</b> yiyu1@163.com <br>
??????? */
?????? public class Box {
???? //①策略接口
???? private IStrategy straegy;
???? //向錦囊中傳入計謀
???? //這里類型是策略IStrategy接口,但傳入的則是“實現”接口的計謀。
???? public Box(IStrategy jimou){
???? //改寫策略
????????? this.straegy = jimou;
????? }
???? //使用計謀
???? public void operate(){
????????? this.straegy.operate();
????? }
?????? }
????????? ④使用計謀
?? /**
??? * @author wonter?
??? * <b>描述:</b>計謀有了,那還要有錦囊裝 <br>
??? * <b>郵件:</b> yiyu1@163.com <br>
??? */
????? public class YunZhao {
??? public static void main(String[] args) {
???? //將錦囊聲明出來
???? Context context;
???? System.out.println("—— 錦囊妙計一 ——");
???? //向錦囊拿出**計謀
???? context = new Context(new first());
????? //執行計謀
???? context.operate();?
???? System.out.println("—— 錦囊妙計二 ——");
???? //向錦囊拿出**計謀
???? context = new Context(new second());
????? //執行計謀
???? context.operate();?
???? System.out.println("—— 以下待為擴展 ——");
???? System.out.println("——??????? ... ....?????? ——");
????? }
好處:
?????? 這就是策略模式,高內聚低耦合的特點也表現出來了。
?????? 還有一個就是擴展性,也就是 OCP原則,只要修改 Context.java 就可以了。
?????? 提供了一種替代繼承的方法,而且既保持了繼承的優點(代碼重用)還比繼承更靈活(算法獨立,可以任意擴展)。
?????? 避免程序中使用多重條件轉移語句,使系統更靈活,并易于擴展。
?/**
??? * @author wonter?
??? * <b>描述:</b> 一天學一個模式 更新中,請關注我的博客! <br>
??? * <b>博客:</b> http://www.cnblogs.com/Javame <br>
??? * <b>郵件:</b> yiyu1@163.com <br>
??? */
總結
以上是生活随笔為你收集整理的一天学一个模式_第一天:策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matrix Computations
- 下一篇: ESXI3.5 单网卡实现iSCSi连接