`
jiav_net
  • 浏览: 104493 次
文章分类
社区版块
存档分类
最新评论
文章列表
该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detail/centralperk/5025595注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常: Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 1 ...
在Robert C. Martin(Bob大叔)的《敏捷软件开发:原则、模式与实践》(Agile Software Development: Principles, Patterns, and Practices)一书中,他提出了一些用于设计组件(或包)的原则。传统的面向对象设计原则,例如SOLID、CARP、LoD等主要关注类的设计,而下面要介绍的这些原则主要用于设计组件和包的结构,一共包括六个原则:前面三个关注组件的内聚性(Cohesion),用于指导我们如何将类组包;后面三个关注组件的耦合性(Coupling),帮助我们确定组件之间的相互关系。简单来说,组件(或包)的设计也要做到“高内聚 ...
标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。 标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。 为此,我们通过一个通俗而有趣的示例!这个示例是设计一个猎人,其持有一把智能,这就是说这把会自动识别人类,若发现瞄准的目标是人类,就不会开火,而其它的任何事物都通杀。   为此,我们使用了下面三个接口:   一个用来表示万事万物的SomeThing       publ ...
//10进制转16进制 Integer.toHexString(20); //10进制转2进制 Integer.toBinaryString(10); //16进制转10进制 Integer.parseInt("10", 16); //还有一种通用的方法 BigInteger bigInt = new BigInteger(str, int1); System.err.println(bigInt.toString(int2)); //其中str为需要转换的字符串,int1为str的所属进制,int2为所需转为的进制
2011年下半年软件设计师考试下午试题最后一题考查状态模式,在本试题中,命题人设计了一个具有多个状态的纸巾售卖机,真题如下: 【全国计算机技术与软件专业技术资格(水平)考试 2011 年下半年 软件设计师 下午试卷】 注:当年试题五和试题六二选一,试题五为C++版,试题六为Java版。 试题五 阅读以下说明和 C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图5-1所示。 图5-1 纸巾售卖机状态图 采用状态(State)模式来实现该纸巾售卖机, ...
一、函数模板 1. 一些注意事项 typedef double Type; template <class Type> // 1. 这里的Type会覆盖全局域中的Type名字。即这里的Type不是double const Type& min(const Type& v1, const Type& v2) { //typedef char Type; // 2. 不能再声明和模板参数类型同名的类型 Type tmp = v1 < v2 ? v1 : v2; return tmp; } // 函数声明和定义中的参 ...
从2006年-2012年,在全国计算机技术与软件专业技术资格(水平)考试软件设计师级别考试中,状态模式已两次作为下午试题的最后一题出现(参考:历年软件设计师下午考试试题汇总统计),分别是2006年下半年和2011年下半年的两次考试。 【全国计算机技术与软件专业技术资格(水平)考试 2006 年下半年软件设计师下午试卷】 注:当年试题六和试题七二选一,试题六为C++版,试题七为Java版。 试题六 阅读以下说明和 C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 传输门是传输系统中的重要装置。传输门具有 Open(打开)、Closed(关闭)、Opening ...
6 状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用,例如公文状态的转换、游戏中角色的升级等。 1. 主要优点 状态模式的主要优点如下: (1) 封装了状态的转换规则,在状态模式中可以将状态的转换代码封装在环境类或者具体状态类中,可以对状态转换代码进行集中管理,而不是分散在一个个业务方法中。 (2) 将所有与某个状态有关的行为放到一个类中,只需要注入一个不同 ...
5 使用环境类实现状态转换 在状态模式中实现状态转换时,具体状态类可通过调用环境类Context的setState()方法进行状态的转换操作,也可以统一由环境类Context来实现状态的转换。此时,增加新的具体状态类可能需要修改其他具体状态类或者环境类的源代码,否则系统无法转换到新增状态。但是对于客户端来说,无须关心状态类,可以为环境类设置默认的状态类,而将状态的转换工作交给具体状态类或环境类来完成,具体的转换细节对于客户端而言是透明的。 在上面的“银行账户状态转换”实例中,我们通过具体状态类来实现状态的转换,在每一个具体状态类中都包含一个stateCheck()方法,在该方法内部实现状态 ...
4 共享状态 在有些情况下,多个环境对象可能需要共享同一个状态,如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象。 下面通过一个简单实例来说明如何实现共享状态: 如果某系统要求两个开关对象要么都处于开的状态,要么都处于关的状态,在使用时它们的状态必须保持一致,开关可以由开转换到关,也可以由关转换到开。 可以使用状态模式来实现开关的设计,其结构如图5所示: 图5 开关及其状态设计结构图 开关类Switch代码如下所示: class Switch { private static State state,onState,of ...
3 完整解决方案 Sunny软件公司开发人员使用状态模式来解决账户状态的转换问题,客户端只需要执行简单的存款和取款操作,系统根据余额将自动转换到相应的状态,其基本结构如图4所示: 图4 银行账户结构图 在图4中,Account充当环境类角色,AccountState充当抽象状态角色,NormalState、OverdraftState和RestrictedState充当具体状态角色。完整代码如下所示: 温馨提示:代码有点长,需要有耐心! //银行账户:环境类 class Account { private AccountState state; //维持一个对抽象状态对象的引用 ...
2 状态模式概述 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。 状态模式定义如下: 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是 ...
“人有悲欢离合,月有阴晴圆缺”,包括人在内,很多事物都具有多种状态,而且在不同状态下会具有不同的行为,这些状态在特定条件下还将发生相互转换。就像水,它可以凝固成冰,也可以受热蒸发后变成水蒸汽,水可以流 ...
一、异常处理 0. 一般用法1 class MyException { // 自定义异常 public : MyException(){errorCode = -1;} MyException(int code) {errorCode = code;} int get(){return errorCode;} private : int errorCode; }; void fun () { try { throw MyException(1); } catch (MyException& e) { // ...
一、函数指针 func.h: #ifndef FUNC_H_ #define FUNC_H_ #include <string> #include <iostream> int compare(const std::string& s1, const std::string& s2); // 普通函数 typedef int (*COMP)(const std::string& s1, const std::string& s2); void myfun(std::string *s1, std::string *s2, C ...
Global site tag (gtag.js) - Google Analytics