笔记
文章平均质量分 59
wingfiring
这个作者很懒,什么都没留下…
展开
-
Java编程思想---对象的单纯性
Java编程思想:“因此你可以在程序中建立复杂的体系,却将复杂的本质隐藏于对象的单纯性之下."问题:1.对象真的单纯吗?例如C++中的一个类,即使是ofstream好了,简单吗?2.如果说ofstream,CWindow这样的东西是简单的,那么,为什么在这个单纯性之下,我们编写、理解和掌握程序仍旧是那么困难?我现在常常想:单一风格似乎不足以解决所有软件问题,但是多风格如C++,又确实过于繁杂,超出原创 2004-09-29 09:23:00 · 1640 阅读 · 1 评论 -
设计模式笔记(9 INTERPRETER & ITERATOR)
INTERPRETER(解释器)适用性:当有一个语言需要解释执行,并且你可以将语言中的句子表示为一个抽象语法树时,可使用解释器模式。思考:一个常见使用情况当然是操纵一种程序语言,例如JavaScript,Python。这个时候,我们通常使用一个脚本引擎库来实现解释器。然而,并不是所有语言都是程序语言,解释器模式更多的时候可以用来处理非程序语言,例如正则表达式。语言的规则也可以简单,也可以复杂,通常原创 2006-04-05 13:06:00 · 1952 阅读 · 0 评论 -
设计模式笔记(10 MEDIATOR & MEMENTO)
MEDIATOR(中介者)适用性:1.一组对象以定义良好但是复杂的方式进行通信,产生相互依赖关系混乱且难以理解。2.一个对象引用很多其他对象并且直接与这些对象通信,导致难以复用该对象。3.想定制分布在多个类中的行为,而又不想生成太多的子类思考: MEDIATOR模式虽然是协调对象的,但是对对象的组织方式也会带来重大影响。对于一组相互作用的对象,这种相互关系是网状的,搞清楚这组对象之间的联系是原创 2006-04-06 16:19:00 · 2018 阅读 · 0 评论 -
利用netsh编写网卡动态配置的脚本
当年华为和思科闹的沸沸扬扬的官司里,有一项是起诉华为的CLI和思科的雷同。其实,CLI这东西,不仅仅是华为这么干,其他的CLI大抵类似,这不,windowsXP和2000都有个netsh.exe程序,就是微软版本的网络配置CLI。 正好有个朋友问我,能不能写个程序切换网卡配置?要求能够在两种配置下切换:一是动态获取网址,二是静态配置。我一想,netsh不正好干这事情吗?打开netsh原创 2006-04-06 17:41:00 · 4271 阅读 · 2 评论 -
设计模式笔记(11 OBSERVER & STATE)
OBSERVER(观察者)适用性:1.当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以是他们可以各自独立地改变和复用。2.当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。3.当一个对象必须通知其他对象,而他有不能假定其他对象是谁。思考: 考虑MVC架构的一个GUI场景,当一个模型对象改变,需要在多个View中及时的更新,而模型并不关原创 2006-04-07 14:24:00 · 3607 阅读 · 0 评论 -
设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
STRATEGY(策略)适用性:1.许多相关的类仅仅是行为有异。”策略“提供了一种用多个行为中的一个行为来配置一个类册方法。2.需要使用一个算法的不同变体。3.算法使用客户不应该知道的数据。可使用策略避免暴露复杂的、于算法有关的数据结构。4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的行署出现。将相关的条件分支移入他们各自的strategy类中以代替这些条件语句。思考:原创 2006-04-10 16:38:00 · 2262 阅读 · 0 评论 -
《C++编程规范》笔记(设计风格)
第5条:一个实体应该只有一个紧凑的职责 单一职责原则。这个原则并不那么容易执行,即使是STL这样的程序库,也一样会犯违反该原则的错误。在这里,举了两个违反这一原则的著名实现:realloc和stl 中的basic_string。不过,对于basic_string,我想比起MFC中的CString还是好了不少。在《Exceptional C++ style》中,对basic_string作了剖原创 2006-04-11 00:21:00 · 5963 阅读 · 17 评论 -
haskell笔记
经典的快速排序的实现代码: quicksort [] = [] quicksort (x:xs) = quicksort [y | y ++ [x] ++ quicksort [y | y =x]嘿嘿,用C/C++来实现的话,需要多少行代码呢? 好像某个人说过:原创 2006-10-11 09:39:00 · 3605 阅读 · 0 评论 -
梦断代码--一个程序员的自白 (二)
本文谢绝转载梦断代码--一个程序员的自白 (二) AIRMax是一个庞大的项目计划,需要3~5年的时间来完成。这个缩写是取公司的主打产品首字母和特征单词组成的,也意味着这个项目要影响到所有这些支柱产品。公司的这些产品都是不同领域的设计软件。这个项目计划在三个方面做资源整合,即为所有产品提供统一的程序库或者框架:程序外观(GUI),渲染(主要是3D引擎),和文件格式(保存设计成果)原创 2012-09-03 14:33:51 · 12604 阅读 · 14 评论 -
梦断代码 --一个程序员的自白(六)
本文谢绝转载 http://www.weibo.com/0x2bPS:这一章水的比较狠,就当看盗版网络小说了吧。见谅。 我对公司有一个很不满意的地方,就是缺乏像样的职业培训。我来到这里之后一直是传授东西给别人--当然我对此并不抗拒,还很乐意--自身的水平却没什么提高。于是我打算还是学点东西。我把业余的时间都拿来玩Linux和开发板。我工作中接触的第一个操作系统就是Unix,原创 2012-09-27 22:02:54 · 14831 阅读 · 30 评论 -
梦断代码--一个程序员的自白(七)
本文谢绝转载 http://www.weibo.com/0x2b 大约是各方面对ADP的反响都不大好,ADP要想推销自己,必须找到新出路。最终,目标锁定到Protein,让Protein通过ADP来存储材质包。对于Protein项目,我至今也不知道最初的立项缘由。Protein后来被定位成一个内容(材质)管理库,为公司的所有产品提供统一的材质管理。最早,Protein是基于FBX(一原创 2012-10-15 10:37:41 · 3561 阅读 · 0 评论 -
设计模式笔记(2 FACTORY METHOD)
FACTORY METHOD(工厂方法)理解:一个类需要创建某个类的实例,但是,又不知道(或者不该知道)如何创建实例时,需要工厂方法.例如一个TEMPLETE METHOD中,创建各种新实例(比如,各种文档),那么需要提供一个单一的创建接口,而将创建的实现分离出去,这种分离的创建行为,就是工厂模式.很显然,所有的创建行为,都必须提供共同的接口,创建的产品,也必须具有共同接口.这一点和抽象类厂是不一原创 2006-03-08 15:50:00 · 1672 阅读 · 0 评论 -
设计模式笔记(7 FLYWEIGHT & PROXY)
FLYWEIGHT(享元)意图:运用共享技术有效地支持大量细粒度的对象。适用性:1.一个程序应用了大量的对象,造成很大的存储开销。2.对象的大多数状态可变为外部状态。3.如果删除对象的外部状态,那么可以用相对较少的公象对象取代很多组对象。4.应用程序不依赖于对象标识思考: 上述的适用性和别的模式中介绍的不太一样。基本上,适合使用FlyWeight模式的场景需要同时满足上述四个条件,而别的模式原创 2006-04-03 14:17:00 · 2002 阅读 · 0 评论 -
vc7.1中nth_element的一个实现优化
今天在vc7.1下写了一个小例子,测试一下nth_element和partial_sort,结果partial_sort表现正常,但nth_element的表现却很奇怪。 代码是这样的:vector v;for (int i = 0; i v.push_back(i + 1);random_shuffle(v.begin(), v.end());nth_e原创 2006-03-29 17:51:00 · 2117 阅读 · 2 评论 -
boos.Program_options使用记录
po::variables_map vm;po::store(po::parse_command_line(ac, av, desc), vm);po::notify(vm); 在store之后,一定要notify,我老是忘记:(还有,vm其实就是是一个map,可以用迭代器来访问成员的。可以用这个来拆分命令行,而不必用splite或者stringstream来处理。vector args原创 2005-11-28 14:33:00 · 1547 阅读 · 0 评论 -
宽窄接口分离的代码
templateclass wrap : public narraw{public: virtual wide& toWide() = 0; virtual const wide& toWide() const = 0;protected: ~warp(){}};templateclass rich : public wide, wrap{ virtual wide& t原创 2006-01-27 12:10:00 · 2015 阅读 · 0 评论 -
设计模式笔记(3 PROTOTYPE & SINGLETON)
PROTOTYPE(原型)适用性:当一个系统应该独立于他的产品创建,构成和表示时,要使用该模式.思考:对比FACTORY METHOD,工厂方法需要统一的Creator,而Creator的提供和被创建对象之间是各自独立的.也就是说,必须为具体的产品类提供相应的Creator(当然,C++的模版技术可以简化一些工作).从语意上来看,工厂方法是凭空创建一个对象,而原型是从已知实例复制新的拷贝.效果上,原创 2006-03-09 13:35:00 · 1715 阅读 · 0 评论 -
C++项目避免线程死锁的体会
前几天被人问道:如果多线程程序出现死锁,怎么办?突然之间,觉得无法回答.在我写过的程序当中,似乎还没有发生过单纯的死锁问题.自己也写了不少多线程程序了,复杂一点的,超过10个以上的线程互相纠缠,为什么一直没有出现死锁呢?一定是我的的某些行为,能够有效的避免死锁,把他们找出来,将是有价值的.于是,我把最近写的一些项目代码翻出来,仔细的检查了一遍. 多线程发生死锁,无非是占着碗里的,看着锅原创 2006-03-13 10:55:00 · 4613 阅读 · 1 评论 -
设计模式笔记(4 ADAPTER & BRIDGE)
ADAPTER(适配器)适用性:想使用一个已经存在的类,而它的接口不符合要求。想创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。结构:适配器使用多重继承对一个接口和另一个接口适配。(这和proxy模式可以比较一下)多重继承的更好说法也许是组合。具体如何实现要看适配器的实现复杂程度。思考:被适配的类可能是多样的,但是应该完成相同的功能,适配器类只是用来匹配接口,并不是用来大规原创 2006-03-14 11:05:00 · 2160 阅读 · 0 评论 -
boost中max_align的实现疑问
在查看boost::aligned_storage的实现代码时,看到,其中的两个枚举量:size和alignment,size是传入类型的sizeof, alignment则是其对齐边界。alignment = ( alignment_ == std::size_t(-1) ? ::boost::detail::aligned_storage::al原创 2006-03-22 18:47:00 · 3668 阅读 · 3 评论 -
设计模式笔记(5 COMPOSITE & DECORATOR)
COMPOSITE(组合)适用性:1.想表示对象的部分整体层次结构2.希望用户忽略组合对象和单个对象的不同。思考:组合模式的所有组件应该具备同一个接口。一直感觉,这种组合是一种递归组合的概念。所有的组件,按照树的结构组织起来,树的叶结点行为可能和中间结点的行为并不一致,这看上去违背了Liskov原则,似乎是一个容易引起迷惑的地方。树的叶结点可能并不能增加子结点,删除子结点的行为也可能失败。而一个中原创 2006-03-27 23:49:00 · 2155 阅读 · 2 评论 -
设计模式笔记(6 FACADE)
FACADE(外观)适用性:1.需要为一个复杂子系统提供一个简单接口时,为子系统提供一个简单的外观。2.客户程序与抽象类的实现之间存在很大的依赖性3.当需要构建一个层次结构的子系统时,使用FACADE来定义子系统中每层的入口点。思考: 关于第一点,好处是明显的,它降低了客户的学习成本。但是,一般而言,如果这个子系统是一个定制的子系统,可能直接提供一个简单接口更省事。如果这个子系统来是已经实现原创 2006-03-28 11:46:00 · 2056 阅读 · 0 评论 -
设计模式笔记(8 CHAIN OF RESPONSIBILITY & COMMAND)
CHAIN OF RESPONSIBILITY(职责链)适用性:1.有多个对象可以处理统一请求,但是,那个对象处理要到运行时刻决定。2.希望在不明确接收者的情况下,向多个对象中的一个提交一个请求。3.可处理一个请求的对象集合应该被动态指定。思考:既然要向未知的接收者提交请求,那么就需要统一的提交界面,也就是说,所有接收者应该实现一个公共接口,来接收请求,当然Delegate可以改变这一状况。一个典原创 2006-04-04 11:50:00 · 1714 阅读 · 0 评论 -
(旧贴)一个复杂的boost.lambda表达式的例子
这是当初发在论坛里的,可惜没有人感兴趣,渐渐的沉没了.虽说对一篇烂文章来说,沉没了反而是一件好事情,对我来说,却是学习中的一个足迹,为将来反省留个见证.老实说,这个例子过于华而不实,写的人好写,读的人却不太好读.不过其中撰写复杂lambda的总结,基本上还是可用的。 lambda库固然是非凡的,但是,Boost.Spirit.Phoenix更是锋利,也许下一次,我会研究研究Phoen原创 2006-03-28 20:11:00 · 2657 阅读 · 2 评论 -
梦断代码--一个程序员的自白(八)
本文谢绝转载 http://www.weibo.com/0x2b因为最初我只是想证明我的那个可扩展的类型系统,因此我给ADPLite改了个名字,叫“息壤”,喻意类型系统会像息壤一样,能够生长。到11年夏天的时候,息壤已经有了一些东西: 1.DBC库--这个是以前的工作。除了pre-condition,post-condition,invariant三个宏之外,允许用户自定义和设置原创 2012-10-18 14:30:37 · 4459 阅读 · 5 评论