java學習

          java學習

           

          設計模式之狀態模式

          現在寫一個用狀態模式實現的根據上班時間狀態變化而行為變化的小程序,當時間<12上午上班時間,
          <13午休時間,<17下午上班時間,<21加班時間,根據時間不同,條用的類方法不同。
          狀態模式適用于當對象的狀態改變時,行為也改變,就可以使用狀態模式
          狀態接口:
          public interface State {
          void writeProgram(Work work);
          }
          不同的實現類:

          public class AfterNoonState implements State {

           @Override
           public void writeProgram(Work work) {
            if(work.getHour()<17){
             System.out.println("工作");
            }else {
             work.setCurrent(new EveningState());
             work.writeProgram();
            }

           }

          }


          public class EveningState implements State {

           @Override
           public void writeProgram(Work work) {
           if(work.isFinish()){
            work.setCurrent(new RestState());
            work.writeProgram();
           }else {
            if(work.getHour()<21){
             System.out.println("加班");
            }else {
             work.setCurrent(new SleepState());
             work.writeProgram();
            }
           }

           }

          }


          public class ForenoonState implements State {

           @Override
           public void writeProgram(Work work) {
           if(work.getHour()<12){
            System.out.println("工作時間");
           }else {
           work.setCurrent(new NoonState()); 
           work.writeProgram();
           }
            
           }

          }


          public class NoonState implements State {

           @Override
           public void writeProgram(Work work) {
            if(work.getHour()<13){
             System.out.println("午睡");
            }else {
             work.setCurrent(new AfterNoonState());
             work.writeProgram();
            }

           }

          }


          public class RestState implements State {

           @Override
           public void writeProgram(Work work) {
            System.out.println("回家");

           }

          }


          public class SleepState implements State {

           @Override
           public void writeProgram(Work work) {
            System.out.println("睡覺");

           }

          }


          調用狀態的類:

          public class Work {
          private State current;

           public Work(double hour,boolean finish){
           current = new ForenoonState();
           this.hour = hour;
           this.finish = finish;
          }
          private double hour;
          public double getHour() {
           return hour;
          }

          public State getCurrent() {
           return current;
          }
          public void setCurrent(State current) {
           this.current = current;
          }
          private boolean finish;
          public boolean isFinish() {
           return finish;
          }

          public void writeProgram(){
           current.writeProgram(this);
          }
          }


          測試類:
          public class Test {
          public static void main(String[] args) {
           Work work = new Work(20, true);
           work.writeProgram();
          }
          }

          posted on 2013-05-06 14:24 楊軍威 閱讀(174) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 怀柔区| 定西市| 扶绥县| 高要市| 高台县| 阿克陶县| 武穴市| 洪泽县| 安新县| 福贡县| 湖北省| 丹东市| 合阳县| 无为县| 华阴市| 太谷县| 北碚区| 永清县| 菏泽市| 毕节市| 托克逊县| 邹平县| 鄯善县| 江达县| 麻栗坡县| 天柱县| 合江县| 大新县| 湘乡市| 潢川县| 邳州市| 长春市| 垣曲县| 夏河县| 屏边| 綦江县| 兴城市| 芒康县| 鄂托克旗| 石渠县| 海城市|