<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java學(xué)習(xí)

    java學(xué)習(xí)

     

    設(shè)計(jì)模式之命令模式

     命令模式就是將一組對(duì)象的相似行為,進(jìn)行了抽象,將調(diào)用者與被調(diào)用者之間進(jìn)行解耦,提
    高了應(yīng)用的靈活性。命令模式將調(diào)用的目標(biāo)對(duì)象的一些異構(gòu)性給封裝起來,通過統(tǒng)一的方式來為調(diào)用者提供服務(wù)。
    適用場(chǎng)景
        1、當(dāng)一個(gè)應(yīng)用程序調(diào)用者與多個(gè)目標(biāo)對(duì)象之間存在調(diào)用關(guān)系時(shí),并且目標(biāo)對(duì)象之間的操作很類似的時(shí)候。
          2、例如當(dāng)一個(gè)目標(biāo)對(duì)象內(nèi)部的方法調(diào)用太復(fù)雜,或者內(nèi)部的方法需要協(xié)作才能完成對(duì)象的某個(gè)特點(diǎn)操作時(shí)。
          3、有時(shí)候調(diào)用者調(diào)用目標(biāo)對(duì)象后,需要回調(diào)一些方法。
    例子:
    命令接口:
    public interface Commond {

        public void execute();
    }
    命令接口實(shí)現(xiàn)類:
    public class LightOnCommond implements Commond{

        private Light light;
        public LightOnCommond(Light light) {
            this.light = light;
        }
        
        @Override
        public void execute() {
            light.on();
        }

    }
    命令的調(diào)用者:
    public class Light {

        public void on() {
            System.out.println("燈亮了");
        }
    }
    public class TurnTvCommond implements Commond {
        
        private Tv tv;
        public TurnTvCommond(Tv tv) {
            this.tv = tv;
        }

        @Override
        public void execute() {
            tv.turn();

        }

    }

    public class Tv {

        public void turn() {
            System.out.println("調(diào)臺(tái)");
        }
    }
    同時(shí)執(zhí)行的多個(gè)命令數(shù)組
    public class MracoCommond implements Commond{

        private Commond[] commonds;
        
        public MracoCommond(Commond...commonds) {
            this.commonds = commonds;
        }
        
        @Override
        public void execute() {
            for(Commond cmd : commonds) {
                cmd.execute();
            }
        }

    }
    命令的包裝類,
    public class RemoteContro {

        private List<Commond> commondList = new ArrayList<Commond>();
        
        public void setCommond(Commond commond) {
            commondList.add(commond);
        }
        
        public void buttonWasPressed(int index){
            commondList.get(index-1).execute();
        }
    }
    public class Test {

        public static void main(String[] args) {
            
            Light light = new Light();
            LightOnCommond loc = new LightOnCommond(light);        
            Tv tv = new Tv();
            TurnTvCommond ttc = new TurnTvCommond(tv);        
            MracoCommond mc = new MracoCommond(loc,ttc);
            RemoteContro rc = new RemoteContro();
            rc.setCommond(ttc);
            rc.setCommond(loc);
            rc.setCommond(mc);
            //rc.buttonWasPressed(3);
            //rc.buttonWasPressed(1);
            rc.buttonWasPressed(2);
            
        }
    }
    當(dāng)輸入123不同時(shí),調(diào)用的命令不同,實(shí)現(xiàn)了多個(gè)命令的包裝

    posted on 2013-04-23 13:01 楊軍威 閱讀(157) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: jizz18免费视频| 一级特黄录像免费播放中文版| 亚洲精品视频免费看| 亚洲视频无码高清在线| 色欲aⅴ亚洲情无码AV蜜桃| 久青草视频在线观看免费| 免费无码成人AV在线播放不卡| 久久精品网站免费观看| 亚洲国产综合无码一区二区二三区| 亚洲日韩精品A∨片无码| 亚洲人成7777影视在线观看| 精品无码专区亚洲| 日本免费大黄在线观看| 亚洲一区精品中文字幕| 黄色三级三级免费看| 最近中文字幕国语免费完整| 免费在线视频一区| 亚洲成人黄色网址| 日韩电影免费观看| 成人毛片免费视频| 91嫩草私人成人亚洲影院| 久久国产乱子伦精品免费午夜 | 99re在线这里只有精品免费| 亚洲高清中文字幕| 成年女人毛片免费观看97| 久久水蜜桃亚洲AV无码精品| 亚洲国产成人影院播放| 亚洲色大成网站www永久男同| 无码午夜成人1000部免费视频| 亚洲精品一级无码中文字幕| GOGOGO免费观看国语| 精品日韩亚洲AV无码一区二区三区| 免费人成在线观看69式小视频| 精品亚洲综合久久中文字幕| 久久久久久亚洲av无码蜜芽 | 亚洲精品高清在线| aⅴ免费在线观看| 亚洲午夜无码久久久久小说 | 亚洲成av人影院| 69成人免费视频| 亚洲av无码一区二区三区网站|