一、java的Map是否重写了hashCode和equals
答:重写了。自己实验或是根据网上的经验,均表明重写了。
二、java的Calendar/Date如何深拷贝
newDate.setTime(oldDate.getTime());
三、Decorate设计模式
以本次实验对Vote的包装为例。
- 先将Vote抽象出一个接口VoteInterface,其含有三个方法,getVoteItems, getDate和candidateIncluded。然后让Vote去implements这个接口。
- 创建一个基础的装饰类VoteDecorator,设为abstract class,实现了VoteInterface接口。里面有一个vote,能通过委托实现Vote的基本功能。此外,该装饰类还添加了后续装饰其所需要的基本功能,例如getVoter等。
- 创建两个VoteDecorator的子类,即实际时使用的装饰类,分别为匿名的和非匿名的。
四、visitor模式
此处也是以实验中为Poll增加visitor为例。
- 新建Visitable.java文件,里面放着Visitable接口,该接口只有一个方法,即void accept(Visitor visitor),该接口用于给实现它的类扩展出一个接受visitor的端口。
- 新建Visitor.java,里面放着Visitor接口,其中有三个visit函数,互为重载关系,它们的参数分别为那三个应用类。此外,该Visitor还有一个getRecentResult方法,返回最近访问处理得出的结果,返回类型为Object。
- 新建CalLegalVoteRateVisitor.java,里面存访Visitor的一个具体实现类,该类的功能是计算并输出(打印)合法选票的比例。
- 在Poll类中,extends Visitable接口。然后在三个应用类中实现该接口,实现方式均为visitor.visit(this)。
- 最后具体实现CalLegalVoteRateVisitor。
五、策略模式
- 创建策略类接口
- 新建几个子类,分别implements该接口。在子类中实现具体算法。
- 要使用该策略的类实例合适的策略子类,然后直接委托调用算法即可,不必在原类中使用,还可以灵活变换。