04 2011 档案

摘要:状态模式(State Pattern)是设计模式的一种,属于行为模式。 定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 意图:允许一个对象在其内部状态改变时改变它的行为 适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。类图结构:这样的话让程序更加面向对象状态模式的好处是将与特定状 阅读全文
posted @ 2011-04-20 11:12 skyme 阅读(583) 评论(1) 推荐(0) 编辑
摘要:Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Base的print函数。这是面向对象中的多态性的体现。(关于虚拟机制是如何实现的,参见Inside the C++ Object Model ,Addison Wesley 1996)//------- 阅读全文
posted @ 2011-04-20 09:03 skyme 阅读(537) 评论(0) 推荐(1) 编辑
摘要:首先看一个对于数据库操作的程序:#include <iostream>using namespace std;class DataOper{public: void insertStu(){ cout<<"开连接..."<<endl; cout<<"开启事务..."<<endl; cout<<"执行insert()操作"<<endl; cout<<"提交事务..."<<endl; cout<<&q 阅读全文
posted @ 2011-04-19 10:17 skyme 阅读(501) 评论(0) 推荐(0) 编辑
摘要:之前已经看过装饰器模式,但是感觉不是很清晰,但是有一种情况下出的代码,一定是装饰器。Widget* aWidget = new BorderDecorator( new BorderDecorator( new ScrollDecorator( new TextField( 80, 24 ))));可以看到,层层嵌套,每个类都可以按照一定的顺序嵌套多次。比如将顺序改为如下:Widget* bWidget = new ScrollDecorator( new BorderDecorator( new ScrollDecorator( new TextField( 80, 24 ))));出现的结 阅读全文
posted @ 2011-04-18 14:00 skyme 阅读(1263) 评论(0) 推荐(0) 编辑
摘要:什么是代理?在我们的日常生活中的例子非常多。比如上网有的时候使用代理服务器,通过代理上网,这就是代理的一个非常常见的例子。从这里边可以看到3个对象:真实网路对象,代理对象还有客户端对象。真实对象和代理对象还都有访问网络的方法所以抽象出网络对象。对应的类图关系如下:如图:真实的网络被隐藏起来,我们访问的是代理的网络对象,同时我们可以在访问代理对象的同时动态的加上比如验证用户,清除用户信息的方法。生成的文件如下:client.hclass Client{public: Client(); virtual ~Client();};client.cpp#include "Client.h&q 阅读全文
posted @ 2011-04-16 16:16 skyme 阅读(1593) 评论(1) 推荐(0) 编辑
摘要:场景:序列生成器系统中统一的序列生成程序,整个系统统一一套!那么就用单例模式吧!首先看看单例模式1)类持有一个自己的实例,而且还是个静态实例。2)类的构造函数为私有属性。3)用以获得实例的方法为静态方法。看看类图然后看一段试例程序:#include <iostream>using namespace std;class Singleton{private: Singleton();//注意:构造方法私有 virtual ~Singleton(); static Singleton* instance;//惟一实例 int var;//成员变量(用于测试) public: stati 阅读全文
posted @ 2011-04-15 09:49 skyme 阅读(658) 评论(0) 推荐(1) 编辑
摘要:Error 200 fault:SOAP-ENV:Client [no subcode]使用gsoap生成的webservice客户端调用其它程序发布的webservice的时候,一直未找到原因,困扰好久,最好,查到原因是因为对方采用的是RPC方式发布的webservice,将url的路径修改为全路径后问题解决,调用成功。const char server[] = "http://localhost:8000";将此地址换成全路径地址。 阅读全文
posted @ 2011-04-14 17:59 skyme 阅读(10780) 评论(1) 推荐(0) 编辑
摘要:首先看看书上的例子吧!人穿衣服的例子!类图就不画了,就是简单的类结构。代码如下:#include <iostream>using namespace std;class person{private: string name;public: person(string name){ this->name = name; } void wearTShirts(){ cout<<"大T恤"<<endl; } void wearBigTrouser(){ cout<<"跨裤"<<endl; } 阅读全文
posted @ 2011-04-13 16:17 skyme 阅读(509) 评论(0) 推荐(0) 编辑
摘要:因为用到了这块,所以转了一篇文章。原文地址http://blog.sina.com.cn/s/blog_5f777ddd0100chbl.html设有学生情况登记表如图所示,用选择排序法对该表按从小到大进行排序。 学生情况登记表学号num姓名name[8]性别sex年龄age成绩score101zhangm1995.6102zhaom2089.0103wangf1896.5104shanm2094.0105chenf2076.5106hanf1987.0107cuim2078.8108dingf1898.4109chum1990.0110gaom2097.3程序代码如下:#include< 阅读全文
posted @ 2011-04-13 14:23 skyme 阅读(4450) 评论(0) 推荐(0) 编辑
摘要:二进制运算符 由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。 使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程、硬件编程等领域。 二进制运算符在数学上的意义比较有限。 在Java代码中,直接书写和输出的数值默认是十进制,Java代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字0开头,例如016,十六进制以数字0和x开头,例如0x12,0xaf等等。 在计算二进制运算时,Java语言的执行环境(JRE)首先将 阅读全文
posted @ 2011-04-12 20:53 skyme 阅读(2232) 评论(0) 推荐(0) 编辑
摘要:原文出自http://chjavach.iteye.com/blog/698743容错恢复机制 容错恢复机制是应用程序开发中非常常见的功能。那么什么是容错恢复呢?简单点说就是:程序运行的时候,正常情况下应该按照某种方式来做,如果按照某种方式来做发生错误的话,系统并不会崩溃,也不会就此不能继续向下运行了,而是有容忍出错的能力,不但能容忍程序运行出现错误,还提供出现错误后的备用方案,也就是恢复机制,来代替正常执行的功能,使程序继续向下运行。 举个实际点的例子吧,比如在一个系统中,所有对系统的操作都要有日志记录,而且这个日志还需要有管理界面,这种情况下通常会把日志记录在数据库里面,方便后续的管理,但 阅读全文
posted @ 2011-04-12 20:28 skyme 阅读(5464) 评论(1) 推荐(1) 编辑
摘要:处理能力:整数部分:9999999999999999(16位长,仟万亿)小数部分:3位,多于3位舍去(不做四舍五入)运行结果:1.23 壹元贰角叁分1234567890123456.123 壹仟贰佰叁拾肆万伍仟陆佰柒拾捌亿玖仟零壹拾贰万叁仟肆佰伍拾陆元壹角贰分叁厘0.0798 柒分玖厘10,001,000.09 壹仟万零壹仟元玖分01.107700 壹元壹角柒厘publicclassMoneyUtil{/**大写数字*/privatestaticfinalString[]NUMBERS={"零","壹","贰","叁&quo 阅读全文
posted @ 2011-04-12 20:26 skyme 阅读(1066) 评论(0) 推荐(0) 编辑
摘要:gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻 阅读全文
posted @ 2011-04-11 20:49 skyme 阅读(16574) 评论(0) 推荐(0) 编辑
摘要:首先看一下策略模式的意图定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。结构适用性许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时[ H O 8 7 ] ,可以使用策略模式。 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。 一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的S t r a 阅读全文
posted @ 2011-04-08 10:48 skyme 阅读(3379) 评论(1) 推荐(1) 编辑
摘要:首先看一段程序,目的是完成一个计算器的计算,面向过程的写法#include "stdafx.h"#include <string>#include <iostream>using namespace std;int main(int argc, char* argv[]){ int strNumA,strNumB; int strOperator; cout<<"请输入数字A:\n"; cin>>strNumA; cout<<"请选择运算符号(1,+,2,-,3,*,4,/):\n&q 阅读全文
posted @ 2011-04-07 16:51 skyme 阅读(1111) 评论(1) 推荐(1) 编辑

点击右上角即可分享
微信分享提示