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 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; } };