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 閱讀(346) 評論(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.

          主站蜘蛛池模板: 镇赉县| 抚顺县| 樟树市| 涡阳县| 陕西省| 琼结县| 高平市| 城市| 文山县| 德阳市| 台州市| 长兴县| 孝义市| 岗巴县| 射阳县| 陵水| 田东县| 承德市| 四川省| 嘉荫县| 岳阳市| 广西| 大丰市| 吴旗县| 海林市| 瑞昌市| 昆明市| 泾源县| 彰化市| 安庆市| 泰和县| 光泽县| 太康县| 仙桃市| 祁阳县| 兖州市| 龙州县| 铜鼓县| 甘南县| 长海县| SHOW|