package com.interview.design.pattern.behavioral; /** * Created_By: stefanie * Date: 14-12-3 * Time: 下午4:57 * * In State pattern a class behavior changes based on its state. * In State pattern, we create objects which represent various states and * a context object whose behavior varies as its state object changes. * * 当对象的状态改变时,同时改变其行为,很好理解! * 就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态, * 所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。 */ public class StatePattern { static interface Membership { public double getDiscount(double price); } static class SilverMembership implements Membership { @Override public double getDiscount(double price) { System.out.println("Get a 10% discount"); return price * 0.9; } } static class GoldenMembership implements Membership { public final static double THRESHOLD = 1000; @Override public double getDiscount(double price) { System.out.println("Get a 20% discount"); return price * 0.8; } } /** * the behavior of Context will change when state changes. */ static class Member{ private Membership membership; private double total; public Member(){ membership = new SilverMembership(); } public double buy(double price){ double cost = membership.getDiscount(price); total += cost; System.out.println("Need to pay: " + cost); checkAccountUpgrade(); return cost; } public void checkAccountUpgrade(){ if(membership instanceof SilverMembership && total > GoldenMembership.THRESHOLD) { membership = new GoldenMembership(); System.out.println("Upgrade to Golden Membership"); } } } public static void main(String[] args) { Member member = new Member(); member.buy(100); member.buy(500); member.buy(700); member.buy(500); } }