zoukankan      html  css  js  c++  java
  • java设计模式-State模式

    1.背景:                    

    MM的状态是非常不固定的,说不定刚才还非常高兴,没准一会就生气了。就跟六月的天似的,说变就变。
    封装一下MM的状态:smile,cry,say;MM的状态决定了这些方法该怎么执行.
     
    2.代码:                    
    Boy.java:
    package com.cy.dp.state;
    
    public class Boy {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
    }
    View Code

    状态类:State.java(抽象类,具体实现交给子类)

    //状态类
    public abstract class State {
        public abstract void smile();
        public abstract void cry();
        public abstract void say();
    }

    HappyState.java (高兴状态)

    package com.cy.dp.state;
    
    public class HappyState extends State {
    
        @Override
        public void smile() {
            // happy smile
            
        }
    
        @Override
        public void cry() {
            // happy cry
            
        }
    
        @Override
        public void say() {
            // happy say
            
        }
    
    }
    View Code

    UnHappyState.java (不高兴状态)

    package com.cy.dp.state;
    
    public class UnHappyState extends State {
    
        @Override
        public void smile() {
            // unhappy smile
            
        }
    
        @Override
        public void cry() {
            // unhappy cry
            
        }
    
        @Override
        public void say() {
            // unhappy say
            
        }
    
    }
    View Code

    MM.java:

    package com.cy.dp.state;
    
    public class MM {
        private String name;
        private State state = new HappyState();
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void smile(){
            state.smile();
        }
        public void cry(){
            state.cry();
        }
        public void say(){
            state.cry();
        }
        
    }

    3.小结:              

    state用的也并不多;简单用一句话解释,就是:一个类的动作是根据这个类的内部状态的不同,而有不同的动作。
     
    疑问:
    1.这跟策略模式有什么区别啊?不同的策略我就怎么执行呗。
    2.这不就是一个简单的多态的应用吗?
     
    答:
    没错,设计模式很多时候区分这个还是那个,往往是在语义上的区分而不是语法上的区分,比如说这里咱们说清楚了这就是不同的状态下我们执行不同的方法,那就是State模式。
    当然, 你说我不同的策略使用不同的方法,哭的策略使用哭的方法,高兴的策略用高兴的方法,也能说得过去;所以在这点上不要咬文嚼字。理解它是什么意思就够了;
     
     
  • 相关阅读:
    greenDAO缓存遇到的大坑的解决方法
    hdoj-1004-Let the Balloon Rise(map排序)
    hdu-2673-shǎ崽 OrOrOrOrz(水题)
    hdoj-1106-排序(stringstream)
    CodeForces
    hdoj-1027-Ignatius and the Princess II(逆康拓展开)
    Alex and broken contest CodeForces
    hdoj-1715-大菲波数(大斐波那契数列)
    nyoj-155-求高精度幂(java大数)
    nyoj-655-光棍的yy(大斐波那契数列)
  • 原文地址:https://www.cnblogs.com/tenWood/p/9136746.html
Copyright © 2011-2022 走看看