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.

          主站蜘蛛池模板: 庐江县| 吴桥县| 南康市| 京山县| 兴化市| 武乡县| 中卫市| 牙克石市| 萝北县| 玉溪市| 漳浦县| 新密市| 咸阳市| 博罗县| 巴塘县| 佛山市| 井研县| 石门县| 偃师市| 寿光市| 中阳县| 耿马| 岑溪市| 甘洛县| 高密市| 翼城县| 丹凤县| 永城市| 搜索| 清原| 兴国县| 西贡区| 玉树县| 茂名市| 游戏| 社旗县| 桑日县| 山阴县| 扬中市| 合江县| 长武县|