㈠:State模式属于对象形为型设计模式;它是将对象在不一样状态下所表现出的行为进行抽象成类;意图是:容许当类的状态改变时改变与之对应的行为;设计模式
㈡:类图app
㈢:场景描述ide
最近欧洲杯如火如荼地进行啊,要论焦点人物,固然是巴神莫属啊.如今咱们就以他为例来Mapping一下State设计模式吧.测试
巴神神的时候,能够打进惊世倒钩;this
巴神Crazy的时候,会思考下人生;spa
正常的巴神;你永远不懂啊;设计
这不正是巴神在不一样的状态下所表现出的不一样的行为吗?orm
欧洲杯正是巴神所处的Context啊.对象
抽象之: get
- /**
- * State下共同的行为抽象
- */
- package com.skywares.designpattern.state.abstractState;
- /**
- * @author hubert
- *
- */
- public interface BalotelliPlay {
- public void play();
- }
- package com.skywares.designpattern.state.concretestate;
- import com.skywares.designpattern.state.abstractState.BalotelliPlay;
- /**
- * 神同样的巴神
- * @author hubert
- *
- */
- public class BalotelliGodPlay implements BalotelliPlay {
- @Override
- public void play() {
- System.out.println(" 打进一个倒钩 ...... ");
- }
- }
- /**
- * 疯子(呵呵)
- */
- package com.skywares.designpattern.state.concretestate;
- import com.skywares.designpattern.state.abstractState.BalotelliPlay;
- /**
- * @author hubert
- *
- */
- public class BalotelliCrazyPlay implements BalotelliPlay{
- @Override
- public void play() {
- System.out.println(" 单刀了, so easy,思考下人生!! ");
- }
- }
- /**
- * 正常的巴神
- */
- package com.skywares.designpattern.state.concretestate;
- import com.skywares.designpattern.state.abstractState.BalotelliPlay;
- /**
- * @author hubert
- *
- */
- public class BalotelliNormalPlay implements BalotelliPlay {
- @Override
- public void play() {
- System.out.println("巴神的世界你永远不懂得 ..");
- }
- }
欧洲杯登场:看巴神表现:
测试类:
- /**
- * Context;
- */
- package com.skywares.designpattern.state.context;
- import com.skywares.designpattern.state.abstractState.BalotelliPlay;
- import com.skywares.designpattern.state.concretestate.BalotelliCrazyPlay;
- import com.skywares.designpattern.state.concretestate.BalotelliGodPlay;
- import com.skywares.designpattern.state.concretestate.BalotelliNormalPlay;
- /**
- * @author hubert
- *
- */
- public class EuropeCupContext {
- private BalotelliPlay balotelliPlay = new BalotelliNormalPlay();
- private int competitionSession = 1;
- public int getCompetitionSession() {
- return competitionSession;
- }
- public void setCompetitionSession(int competitionSession) {
- this.competitionSession = competitionSession;
- }
- public void changeSession()
- {
- switch(competitionSession)
- {
- case 1:
- balotelliPlay = new BalotelliCrazyPlay();
- break;
- case 2:
- balotelliPlay = new BalotelliGodPlay();
- break;
- default:
- ;
- }
- }
- public void balotelliPlayInMatch()
- {
- balotelliPlay.play();
- }
- }
- package com.skywares.designpattern.state.context;
- /**
- * @author hubert
- *
- */
- public class TestState {
- /**
- * @param args
- */
- public static void main(String[] args) {
- EuropeCupContext context = new EuropeCupContext();
- context.balotelliPlayInMatch();
- context.setCompetitionSession(1);
- context.changeSession();
- context.balotelliPlayInMatch();
- context.setCompetitionSession(2);
- context.changeSession();
- context.balotelliPlayInMatch();
- }
- }