1. 模板方法模式(template mathod)
package com.bjsxt.templateMethod;
public abstract class BankTemplateMethod {
//具体方法
public void takeNumber(){
System.out.println("取号排队");
}
public abstract void transact(); //办理具体的业务 //钩子方法
public void evaluate(){
System.out.println("反馈评分");
}
public final void process(){ //模板方法!!!
this.takeNumber();
this.transact();
this.evaluate();
}
}
package com.bjsxt.templateMethod;
public class Client {
public static void main(String[] args) {
BankTemplateMethod btm = new DrawMoney();
btm.process();
//采用匿名内部类
BankTemplateMethod btm2 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要存钱!");
}
};
btm2.process();
BankTemplateMethod btm3 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要理财!我这里有2000万韩币");
}
};
btm3.process();
}
}
class DrawMoney extends BankTemplateMethod {
@Override
public void transact() {
System.out.println("我要取款!!!");
}
}
1. 状态模式(state)
酒店系统中,房间状态变化的相关类图结构:
HomeContext 与State Interface是聚合关系,HomeContext 持有State Interface的引用
package com.bjsxt.state;
public interface State {
void handle();
}
package com.bjsxt.state;
/**
* 空闲状态
* @author Administrator
*
*/
public class FreeState implements State {
@Override
public void handle() {
System.out.println("房间空闲!!!没人住!");
}
}
package com.bjsxt.state;
/**
* 已预订状态
* @author Administrator
*
*/
public class BookedState implements State {
@Override
public void handle() {
System.out.println("房间已预订!别人不能定!");
}
}
package com.bjsxt.state;
/**
* 已入住状态
* @author Administrator
*
*/
public class CheckedInState implements State {
@Override
public void handle() {
System.out.println("房间已入住!请勿打扰!");
}
}
package com.bjsxt.state;
/**
* 房间对象
* @author Administrator
*
*/
public class HomeContext {
//如果是银行系统,这个Context类就是账号。根据金额不同,切换不同的状态!
private State state;
public void setState(State s){
System.out.println("修改状态!");
state = s;
state.handle();
}
}
package com.bjsxt.state;
public class Client {
public static void main(String[] args) {
HomeContext ctx = new HomeContext();
ctx.setState(new FreeState());
ctx.setState(new BookedState());
}
}