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

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

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

    人在江湖

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    參考 http://en.wikipedia.org/wiki/Command_pattern

    Command Design Pattern Class Diagram.png

    /*the Invoker class*/
    public class Switch {
     
        private Command flipUpCommand;
        private Command flipDownCommand;
     
        public Switch(Command flipUpCmd, Command flipDownCmd) {
             this.flipUpCommand = flipUpCmd;
             this.flipDownCommand = flipDownCmd;
        }
     
        public void flipUp() {
             flipUpCommand.execute();
        }
     
        public void flipDown() {
             flipDownCommand.execute();
        }
    }
     
    /*Receiver class*/
    public class Light {
     
         public Light() {  }
     
         public void turnOn() {
            System.out.println("The light is on");
         }
     
         public void turnOff() {
            System.out.println("The light is off");
         }
    }
     
    /*the Command interface*/
    public interface Command {
        void execute();
    }
     
    /*the Command for turning on the light*/
    public class FlipUpCommand implements Command {
     
       private Light theLight;
     
       public FlipUpCommand(Light light) {
            this.theLight=light;
       }
     
       public void execute(){
          theLight.turnOn();
       }
    }
     
    /*the Command for turning off the light*/
    public class FlipDownCommand implements Command {
     
       private Light theLight;
     
       public FlipDownCommand(Light light) {
            this.theLight=light;
       }
     
       public void execute() {
          theLight.turnOff();
       }
    }
     
    /*The test class or client*/
    public class PressSwitch {
     
       public static void main(String[] args) {
           Light lamp = new Light();
           Command switchUp = new FlipUpCommand(lamp);
           Command switchDown = new FlipDownCommand(lamp);
     
           // See criticism of this model above:
           // The switch itself should not be aware of lamp details (switchUp, switchDown) 
           // either directly or indirectly
           Switch s = new Switch(switchUp,switchDown);
     
           try {
               if (args[0].equalsIgnoreCase("ON")) {
                    s.flipUp();
               } else if (args[0].equalsIgnoreCase("OFF")) {
                   s.flipDown();
               } else {
                   System.out.println("Argument \"ON\" or \"OFF\" is required.");
               }
           } catch (Exception e){
               System.out.println("Arguments required.");
           }
       }
    }
    =====================

    java tip (http://www.javaworld.com/javaworld/javatips/jw-javatip68.html?page=3) 給了類似的例子,多了Fan作為receiver:

    TestCommand.java
    class Fan {
            public void startRotate() {
                    System.out.println("Fan is rotating");
            }
            public void stopRotate() {
                    System.out.println("Fan is not rotating");
            }
    }
    class Light {
            public void turnOn( ) {
                    System.out.println("Light is on ");
            }
            public void turnOff( ) {
                    System.out.println("Light is off");
            }
    }
    class Switch {
            private Command UpCommand, DownCommand;
            public Switch( Command Up, Command Down) {
                    UpCommand = Up; // concrete Command registers itself with the invoker
                    DownCommand = Down;
            }
            void flipUp( ) { // invoker calls back concrete Command, which executes the Command on the receiver
                            UpCommand . execute ( ) ;                          
            }
            void flipDown( ) {
                            DownCommand . execute ( );
            }
    }
    class LightOnCommand implements Command {
            private Light myLight;
            public LightOnCommand ( Light L) {
                    myLight  =  L;
            }
            public void execute( ) {
                    myLight . turnOn( );
            }
    }
    class LightOffCommand implements Command {
            private Light myLight;
            public LightOffCommand ( Light L) {
                    myLight  =  L;
            }
            public void execute( ) {
                    myLight . turnOff( );
            }
    }
    class FanOnCommand implements Command {
            private Fan myFan;
            public FanOnCommand ( Fan F) {
                    myFan  =  F;
            }
            public void execute( ) {
                    myFan . startRotate( );
            }
    }
    class FanOffCommand implements Command {
            private Fan myFan;
            public FanOffCommand ( Fan F) {
                    myFan  =  F;
            }
            public void execute( ) {
                    myFan . stopRotate( );
            }
    }
    public class TestCommand {
                    public static void main(String[] args) {
                            Light  testLight = new Light( );
                            LightOnCommand testLOC = new LightOnCommand(testLight);
                            LightOffCommand testLFC = new LightOffCommand(testLight);
                            Switch testSwitch = new Switch( testLOC,testLFC);      
                            testSwitch.flipUp( );
                            testSwitch.flipDown( );
                            Fan testFan = new Fan( );
                            FanOnCommand foc = new FanOnCommand(testFan);
                            FanOffCommand ffc = new FanOffCommand(testFan);
                            Switch ts = new Switch( foc,ffc);
                            ts.flipUp( );
                            ts.flipDown( );
                    }
    }              
    Command.java
    public interface Command {
            public abstract void execute ( );
    }

    posted on 2011-02-12 23:25 人在江湖 閱讀(1559) 評論(0)  編輯  收藏 所屬分類: design pattern
    主站蜘蛛池模板: 亚洲色偷拍另类无码专区| 日韩免费福利视频| 亚洲综合网站色欲色欲| 美女裸免费观看网站| 免费va人成视频网站全| 男女作爱免费网站| 亚洲国产激情一区二区三区| 黄色免费在线网址| 国产成人亚洲综合无码| 东方aⅴ免费观看久久av| 亚洲va无码专区国产乱码| 99精品视频在线观看免费播放 | 日本一卡精品视频免费| 亚洲国产一区国产亚洲| 免费可以看黄的视频s色| 波多野结衣亚洲一级| 国产美女a做受大片免费| 春意影院午夜爽爽爽免费| 亚洲精品无码不卡在线播HE| 免费人成在线观看网站品爱网| 亚洲最新中文字幕| 韩国日本好看电影免费看| fc2免费人成在线| 亚洲免费精彩视频在线观看| 无码专区永久免费AV网站| 麻豆亚洲AV成人无码久久精品| 中文字幕精品亚洲无线码一区| 日韩精品无码专区免费播放| 99热亚洲色精品国产88| 亚洲国产成人久久一区WWW| 免费看搞黄视频网站| 亚洲人成网国产最新在线| 国产精品亚洲不卡一区二区三区 | mm1313亚洲精品无码又大又粗 | 亚洲精品人成网线在线播放va| 亚洲国产一区明星换脸| 999任你躁在线精品免费不卡| 亚洲av无码av在线播放| 久久99国产亚洲精品观看| 日本一道高清不卡免费| 色欲国产麻豆一精品一AV一免费|