java学习笔记-设计模式21(状态模式)

意图

  允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

public class State {  

    private String value;  

    public String getValue() {
        return value;
    }  

    public void setValue(String value) {
        this.value = value;
    }  

    public void method1(){
        System.out.println("execute the first opt!");
    }  

    public void method2(){
        System.out.println("execute the second opt!");
    }
}

  

public class Context {  

    private State state;  

    public Context(State state) {
        this.state = state;
    }  

    public State getState() {
        return state;
    }  

    public void setState(State state) {
        this.state = state;
    }  

    public void method() {
        if (state.getValue().equals("state1")) {
            state.method1();
        } else if (state.getValue().equals("state2")) {
            state.method2();
        }
    }
}

  

public class Test {  

    public static void main(String[] args) {  

        State state = new State();
        Context context = new Context(state);  

        //设置第一种状态
        state.setValue("state1");
        context.method();  

        //设置第二种状态
        state.setValue("state2");
        context.method();
    }
}

  

  转自:http://blog.csdn.net/zhangerqing/article/details/8245537

时间: 2024-10-18 19:36:32

java学习笔记-设计模式21(状态模式)的相关文章

JAVA学习笔记-----设计模式之工厂模式

1.设计模式---------->工厂模式: Sender.java package me.ele.mytest; public interface Sender {    public void send(); } 2.MailSend package me.ele.mytest; public class MailSend implements Sender {     @Override     public  void send()     {         System.out.pr

Java学习笔记——设计模式之六.原型模式(浅克隆和深克隆)

That there's some good in this world, Mr. Frodo. And it's worth fighting for. 原型模式(prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 至于Object.clone()这里就不赘述了.文档看起来可能有些难懂,直接上代码反而更容易理解: 浅克隆: 1 package cn.happy.design_pattern._06prototype.shallowclone; 2 3 pub

Java学习笔记——设计模式之四.代理模式

To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: 1 package cn.no4.proxy; 2 3 public interface IMakeMoney { 4 5 void makeMoney(); 6 } 1 package cn.no4.proxy; 2 3 public class Proxy implements IMakeMoney { 4

Java学习笔记——设计模式之七.模板方法模式

模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构图: 代码: 算法骨架: 1 package cn.happy.design_pattern._07templatemethod; 2 3 public abstract class AbstractClass { 4 5 public abstract void primitiveOperation1(); 6 pub

java学习笔记-设计模式20(备忘录模式)

意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Original(String value) { this.valu

java学习笔记-设计模式14(策略模式)

意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可. public interface ICalculator { public int calculate(String exp); } public abstract class AbstractCalculator { public int[] split(String exp,String opt){ String

java学习笔记-设计模式9(代理模式)

意图 为其他对象提供一种代理以控制对这个对象的访问. public interface Sourceable { public void method(); } public class Source implements Sourceable{ @Override public void method() { System.out.println("this is original method!"); } } public class Proxy implements Source

java学习笔记-设计模式15(模板方法模式)

意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用 public abstract class AbstractCalculator { /*主方法,实现对本类其它方法的调用*/ public final int calcul

java学习笔记-设计模式19(命令模式)

意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作 public interface Command { public void exe(); } public class MyCommand implements Command { private Receiver receiver; public MyCommand(Receiver receiver) { this.receiver = receiver; } @Over