1 状态模式
某个对象中,设置一个表示状态的成员,与该对象的状态相关行为,由表示这个对象的具体状态类实现。
具体的状态类在执行时,根据执行情况修改其所属对象的状态成员。
class State {
void do(Switcher sw)
};
class Switcher
{
State state;
void click() {
state.do(this)
}
}
class StateOpen : State {
void do(Switcher sw) {
...
sw.state = new StateTwo())
}
};
class StateClose() {
void do(Switcher sw) {
...
sw.state = new StateClick();
}
};
2 策略模式
将一系列算法,按统一的接口进行封装,使他们可以相互替换。
定义Strategy和Context接口,Strategy接口的具体子类实现算法,
Context的子类包含数据。使Strategy的子类可访问Context中所需的数据。
class Context;
class Strategy {
Context calc(Context args);
};
class AddContext : Context {
int number1;
int number2;
};
class ResultContext : Context {
int number;
};
class AddStrategy : Stratrgy {
Context calc(Context ctx) {
AddContext ac = (AddContext)ctx;
ResultContext rc;
rc.number = ac.number1 + ac.number2;
return rc;
}
};
class MultiplyStratrgy ....
3 责任链模式
将各个处理对象组成一个处理链。
class Handle
{
void process();
};
class HandleOne : Handle
{
Handle other_handler;
void process() {
...
handler.process();
}
};
4 访问者模式
不修改数据类的前提下,实现对数据类中数据的不同操作。
class Visitor {
void visit(int value);
};
class DataContainer {
list<int> dataList;
void accept(Visitor visitor) {
iterator iter = dataLit.begin();
while ( iter != dataList.end() ) {
visitor.visit(iter.value);
++iter;
}
}
};
class PrintVisitor {
void visit(int value) {
printf("%d\n", value);
}
};
class SummaryVisitor {
int sum;
void visit(int value) {
sum += value;
}
};