首页 > 其他 > 详细

设计模式(第二十二式:状态模式)

时间:2019-07-04 18:54:22      阅读:97      评论:0      收藏:0      [点我收藏+]

概念:
  状态模式:Allow an object to alter its benhavior when its internal state changes. The object will appear to change its class. 当一个对象内在状态改变是允许改变行为,这个对象看起来像改变了其类型。

实现:
  定义状态接口或抽象状态类

    public abstract class AbstractCourse {
        public AbstractCourse(String teacherName) {
            this.teacherName = teacherName;
        }

        private String teacherName;

        public abstract void study();

        public String getTeacherName() {
            return teacherName;
        }

        public void setTeacherName(String teacherName) {
            this.teacherName = teacherName;
        }
    }


  状态具体实现

    public class BiologyClass extends AbstractCourse {

        public BiologyClass(String teacherName) {
            super(teacherName);
        }

        @Override
        public void study() {
            System.out.println(this.getTeacherName() + "正在上生物课");
        }
    }

 

    public class MathClass extends AbstractCourse {

        public MathClass(String teacherName) {
            super(teacherName);
        }

        @Override
        public void study() {
            System.out.println(this.getTeacherName() + "正在上数学课");
        }
    }

 


  具体应用场景

    public class School {
        private AbstractCourse math = new MathClass("数学老师");
        private AbstractCourse biology = new BiologyClass("生物老师");

        private AbstractCourse now;

        public void study(){
            now.study();
        }

        public AbstractCourse getMath() {
            return math;
        }

        public void setMath(AbstractCourse math) {
            this.math = math;
        }

        public AbstractCourse getBiology() {
            return biology;
        }

        public void setBiology(AbstractCourse biology) {
            this.biology = biology;
        }

        public AbstractCourse getNow() {
            return now;
        }

        public void setNow(AbstractCourse now) {
            this.now = now;
        }
    }


测试及结果:

    public class StateTest {

        @Test
        public void statetest(){
            School school = new School();
            school.setNow(school.getMath());
            school.study();

            school.setNow(school.getBiology());
            school.study();
        }
    }


  数学老师正在上数学课
  生物老师正在上生物课
分析:
  1.状态过多会导致子类过多。
  2.封装性好,在不改变应用场景的情况下,实际上是改变了使用的不同类,但是对外外部而言是种改变了其中的属性(状态)。

设计模式(第二十二式:状态模式)

原文:https://www.cnblogs.com/ben-mario/p/11134121.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!