rednight

          0x2B|~0x2B,That's not a question,Just do it.
          posts - 32, comments - 14, trackbacks - 0, articles - 0

          state pattern

          Posted on 2006-12-26 14:46 rednight 閱讀(349) 評論(0)  編輯  收藏 所屬分類: 工作學習
          The logic to change state is only inside one method (initVesselView(…)) inside GrVessel.java.?

          if (viewType == VIEW_STOWAGE) {
          ??????????? vslView_ = new VesselStowageView(leftPoint, bow2Left, leftCenter,
          ???????????????????????????????????????????? rightCenter, shipWidth_);
          ??????? }
          ??????? else if (viewType == VIEW_SIDE) {
          ??????????? vslView_ = new VesselSideView(leftPoint, bow2Left, leftCenter,
          ????????????????????????????????????????? rightCenter, shipWidth_);
          ??????? }
          ??????? else if (viewType == VIEW_PLAN) {
          ??????????? vslView_ = new VesselPlanView(leftPoint, bow2Left, leftCenter,
          ????????????????????????????????????????? rightCenter, shipWidth_);
          ??????? }
          ??????? else {
          ??????????? throw new IllegalArgumentException(
          ??????????????? "GrVessel::initVesselView-->Invalid view type!");
          ??????? }


          We do not need to repeat this logic of changing view in many other method.
          This is the benefit of State design pattern.
          The 3 state classes here are VesselPlanView.java, VesselSideView.java and VesselStowageView.java

          Please note that in the state classes, if a method is supported by stateA and not supported by stateB.?
          Then, in stateB, the method body will throw an exception (IllegalArgumentException) to indicate that coder call the wrong method in the wrong state.

          Example, in VesselPlanView.java, public boolean addStowage(...).? This method is only meaningful to stowageView.

          public boolean addStowage(IlvManager manager, List transformList, IlvGraphic stowage, String stadBayN,
          ????????????????????????????? boolean isSelect) {
          ??????? throw new IllegalArgumentException(
          ??????????????? "GrVessel::addStowage-->be sure the vessel at stowage view!");
          ??? }


          Hence, in PlanView, the method body will throw exception.

          Just to share with you a better way to code.

          主站蜘蛛池模板: 双鸭山市| 庄浪县| 柳江县| 威远县| 上栗县| 安塞县| 辉南县| 墨脱县| 西和县| 山西省| 西乌珠穆沁旗| 延寿县| 沭阳县| 普兰店市| 多伦县| 东乌珠穆沁旗| 乌拉特前旗| 沁水县| 阿拉尔市| 准格尔旗| 崇信县| 岳阳市| 邳州市| 阿克陶县| 达拉特旗| 湘阴县| 轮台县| 安宁市| 绥中县| 东兴市| 拜城县| 曲阜市| 肥乡县| 菏泽市| 东乌珠穆沁旗| 游戏| 张北县| 长治县| 东丽区| 辽宁省| 河北省|