interface State { void operation1(); void operation2(); void operation3(); } class ServiceProvider { private State state; public ServiceProvider(State state) { this.state = state; } public void changeState(State newState) { state = newState; } public void service1() { state.operation1(); state.operation3(); } public void service2() { state.operation1(); state.operation2(); } public void service3() { state.operation3(); state.operation2(); } } class Implementation1 implements State { public void operation1() { System.out.println("Implementation1.operation1()"); } public void operation2() { System.out.println("Implementation1.operation2()"); } public void operation3() { System.out.println("Implementation1.operation3()"); } } class Implementation2 implements State { public void operation1() { System.out.println("Implementation2.operation1()"); } public void operation2() { System.out.println("Implementation2.operation2()"); } public void operation3() { System.out.println("Implementation2.operation3()"); } } public class StateDemo { static void run(ServiceProvider sp) { } public static void main(String args[]) { ServiceProvider sp = new ServiceProvider(new Implementation1()); sp.service1(); sp.service2(); sp.service3(); sp.changeState(new Implementation2()); sp.service1(); sp.service2(); sp.service3(); } }