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

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

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

    人在江湖

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      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 人在江湖 閱讀(1565) 評論(0)  編輯  收藏 所屬分類: design pattern
    主站蜘蛛池模板: 亚洲黄色片免费看| 精品熟女少妇a∨免费久久| 亚洲同性男gay网站在线观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲综合AV在线在线播放| 妞干网在线免费观看| 久久久久免费精品国产小说| 黄色三级三级三级免费看| 男人天堂2018亚洲男人天堂| 亚洲网站免费观看| 欧洲亚洲国产清在高| 亚洲国产成人五月综合网| 免费无码黄网站在线观看| av无码久久久久不卡免费网站| a毛片视频免费观看影院| 一级免费黄色大片| 国产产在线精品亚洲AAVV| 亚洲男人天堂2018av| 亚洲免费视频观看| 亚洲综合久久久久久中文字幕| 亚洲av综合av一区| 亚洲日韩aⅴ在线视频| 亚洲综合最新无码专区| 亚洲?v无码国产在丝袜线观看| 日韩a级毛片免费视频| 成年轻人网站色免费看| 希望影院高清免费观看视频| 18pao国产成视频永久免费| 无码国产精品一区二区免费3p| 18禁超污无遮挡无码免费网站| 精品一区二区三区免费观看| 国产精品美女免费视频观看| 成人久久久观看免费毛片| 极品美女一级毛片免费| 深夜A级毛片视频免费| 男女污污污超污视频免费在线看| 亚洲AV日韩AV一区二区三曲| 噜噜噜亚洲色成人网站| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲综合色在线观看亚洲| 亚洲中文字幕在线乱码|