现在的位置: 首页 > 综合 > 正文

设计模式-结构型模式-状态

2017年12月08日 ⁄ 综合 ⁄ 共 2781字 ⁄ 字号 评论关闭

行为模式涉及到算法和对象间职责的分配。
state:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

 

package behaviour.state;
/**
 *  A concrete state for generating bill
 */
import java.io.*;

public class GenerateBill extends ShopState {
    public static boolean instanceFlag = false; //true if have 1 instance
    private GenerateBill() {
    }
    public static GenerateBill getInstance() {
        if(! instanceFlag) {
            instanceFlag = true;
            return new GenerateBill();
        }
        return null;
    }
    public void generateBill() {
        System.out.println("The state is generating bill now !");
    }
}

 

package behaviour.state;
/**
 *  A state interface
 *  用户在网上购物的状态变化:
 *  选择商品 --> 生成订单 --> 付款取货
 */
public interface IShopState {
    public void shop();
    public void generateBill();
    public void pay();
    //protected void changeState(ShopContext c, IShopState);
}

 

package behaviour.state;
/**
 *  A concrete state for customer shopping
 */
import java.io.*;

public class Pay extends ShopState {
    public static boolean instanceFlag = false; //true if have 1 instance
    private Pay() {
    }
    public static Pay getInstance() {
        if(! instanceFlag) {
            instanceFlag = true;
            return new Pay();
        }
        return null;
    }
    public void pay() {
        System.out.println("The state is pay now !");
    }
}

 

package behaviour.state;
/**
 *  A concrete state for customer shopping
 */
import java.io.*;

public class Shop extends ShopState {
    public static boolean instanceFlag = false; //true if have 1 instance
    private Shop() {
    }
    public static Shop getInstance() {
        if(! instanceFlag) {
            instanceFlag = true;
            return new Shop();
        }
        return null;
    }
    public void shop() {
        System.out.println("The state is shopping now !");
    }
}

 

package behaviour.state;
/**
 *  The context for user useing
 */
public class ShopContext  {
    private ShopState currentState;
    public ShopContext() {
    }
    public void changeState(ShopState s) {
        currentState = s;
    }
    public void shop() {
        currentState.shop();
    }
    public void generateBill() {
        currentState.generateBill();
    }
    public void pay() {
        currentState.pay();
    }
}

 

package behaviour.state;
/**
 *  The parent class of state
 */
public class ShopState implements IShopState {
    public ShopState() {
    }
    public void shop() { }
    public void generateBill() { }
    public void pay() { }
    protected void changeState(ShopContext c, ShopState s) {
        c.changeState(s);
    }
}

 

package behaviour.state;
/**
 *  A test client
 */
public class Test  {
    public static void main(String[] args) {
        ShopContext myContext = new ShopContext();
        ShopState myShop = Shop.getInstance();
        ShopState myGenBill = GenerateBill.getInstance();
        ShopState myPay = Pay.getInstance();
       
        myContext.changeState(myShop);
        myContext.shop();

        myContext.changeState(myGenBill);
        myContext.generateBill();
       
        myContext.changeState(myPay);
        myContext.pay();

        myShop.changeState(myContext, myPay);
        myContext.pay();
    }
}

抱歉!评论已关闭.