博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之行为模式(1)-状态、策略、责任链、访问者
阅读量:5890 次
发布时间:2019-06-19

本文共 1961 字,大约阅读时间需要 6 分钟。

hot3.png

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

    
    
   

转载于:https://my.oschina.net/luckysym/blog/183166

你可能感兴趣的文章
博客园博客自动生成三级目录(generate three levels content using JS in cnblogs)
查看>>
联通高管频频出走:通信业已成鸡肋?
查看>>
关于多线程的那些事
查看>>
js 将json字符串转换为json对象的方法解析
查看>>
1. Two Sum
查看>>
让浏览器不再显示 https 页面中的 http 请求警报
查看>>
hdu4893Wow! Such Sequence! (线段树)
查看>>
Android 最简单的SD卡文件遍历程序
查看>>
JavaScript获取DOM元素位置和尺寸大小
查看>>
js-ES6学习笔记-Generator函数
查看>>
1065: 贝贝的加密工作
查看>>
lintcode 单词接龙II
查看>>
Material Design学习之 ProgreesBar
查看>>
WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案
查看>>
Redis之 命令行 操作
查看>>
Jvm(46),指令集----对象创建与访问指令
查看>>
如何直接强制客户端刷新.js文件
查看>>
【C#】窗体动画效果
查看>>
过滤器
查看>>
EL 表达式小结
查看>>