- 博客(18)
- 收藏
- 关注
原创 Abstract Factory 抽象工厂模式
Abstract Factory抽象工厂模式抽象工厂模式:提供接口以 创建一组 相关/ 相互依赖的对象 ,但不需要指明其具体类。现在有以下抽象产品接口和具体产品类://AbstractProductpublic interface Window{ public void setTitle(String s); public void repaint(); public void ...
2018-06-23 22:18:10
225
原创 Factory Method pattern 工厂方法模式
Factory Method pattern工厂方法模式当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。代码示例:有个抽象产品;public interface Trace { // turn on and off debugging ...
2018-06-23 21:35:49
206
原创 Adapter 适配器模式
Adapter适配器模式将某个类/ 接口转换为client 期望的其他形式,通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。目的是为了包装原来的类。代码示例:不用Adapter模式:class LegacyRectangle { void display(int x1, int y1, int w, int h) {... }} class Clien...
2018-06-23 20:44:04
232
原创 Iterator Pattern迭代器模式
Iterator Pattern迭代器模式:首先了解两个接口:1. Iterable接口:实现该接口的集合对象是可迭代遍历的public interface Iterable<T> { ... Iterator<T> iterator();}2.Iterator接口:迭代器public interface Iterator<E> { boole...
2018-06-23 17:59:04
213
原创 Composition(组合)与Aggregation(聚合)
Composition(组合)与Aggregation(聚合)的区别:1. 若论两种关系表示的强弱程度,Composition应该更强一些,这也是为什么在图中会以一个实心菱形来代表。反之,聚合使用的是空心菱形。见下图.2. Composition表示的是'Part-of'的关系, 以图1为例,Engine是Car的一部分。脱离Car的Engine是没有实在意义的;而Aggregation表示的是'...
2018-06-23 13:52:44
826
原创 CRP原理的简单例子
CRP:英文全名Composite Reuse Principle,译为复合的复用原则。可以解释为类应该通过复合的使用(包含实现所需功能的其他类的实例)实现多态行为和代码重用,而不是从基或父类继承。代码示例:class Employee { BonusCalculator bc; ...}interface BonusCalculator { Money comput...
2018-06-23 11:36:12
3120
原创 将继承Inheritance变为委派Delegation的方法
将继承Inheritance变为委派Delegation的方法;什么时候这么做?如果子类只需要复用父类中的一小部分方法,可以不需要使用继承,而是通过委派机制来实现。方法:在新类中创建一个父类型的域,写方法时使用这个父类型的方法,就实现了所谓的委派。代码示例 :原来是继承关系:class RealPrinter {void print() {System.out.println("Printin...
2018-06-23 11:16:49
256
原创 排序的两种方法
如果ADT需要比较大小,或者要放入Collections或Arrays进行排序,可实现Comparator接口并override compare()函数。第一种:构建一个新的Comparator类,重写compare()函数,在客户端直接调用静态函数Collections.sort(XXX,新的Comparator类)代码示例:需要比较Edge类:构建一个新的Comparator类EdgeComp...
2018-06-23 10:52:40
215
原创 mutable数据类型的等价性
mutable类型数据的等价性可以分为2种:观察等价性和行为等价性观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致行为等价性:调用对象的任何方法都展示出一致的结果对可变类型来说,往往倾向于实现严格的观察等价性,对不可变类型来说,不存在行为等价性,只存在观察等价性,因为不可变类型不能发生变化。但在有些时候,观察等价性可能导致bug,甚至可能破坏RI比如:加入有一个List,并且...
2018-06-22 22:11:41
479
原创 关于hashcode里面使用31系数的原因
hashcode其实就是散列码,使用hashcode使用高效率的哈希算法来定位查找对象。我们在使用容器来存储数据的时候会计算一串散列码,然后将数据放入容器。如:String s =“java”,那么计算机会先计算散列码,然后放入相应的数组中,数组的索引就是从散列吗计算来的,然后再装入数组里的容器里,如List.这就相当于把你要存的数据分成了几个大的部分,然后每个部分存了很多值, 你查询的时候先查大...
2018-06-22 18:02:00
1120
原创 Java重写hashcode的标准
hashCode是指在hash maps中使用的哈希码,一旦equals()方法被重写,则hashCode()方法也必须被重写。当equals方法中涉及的参数没有改变时,hashCode应保持不变。如果根据equals方法,两个对象是相等的,那么这两个对象的hashCode应该一样。两个对象如果不相等,hashCode不强制要求不一样,但是如果能保证不一样,对哈希的效率会比较有帮助最重要的是第二点...
2018-06-22 17:51:09
1366
原创 java.lang.NullPointerException解决办法
最近在编程过程中经常遇到java.lang.NullPointerException的报错信息,主要是因为空指针引用异常,总结了几次经验后发现主要有以下几种情况:1.字符串变量未初始化; 如Sting s;这时在后面的处理过程中就可能会报错。2.接口类型的对象没有用具体的类初始化List lt; 会报错 List lt = new ArrayList(); 则不会报错了 3·当一个对象的值为空时,...
2018-06-22 17:18:46
15708
原创 关于Python中出现UnicodeEncodeError的解决办法
之前用Python写爬虫小程序时遇到了这样的报错:UnicodeEncodeError: ‘gbk’ codec can’t encode character,感觉是文件编码格式的问题,但是就是不知道怎么解决,后来查了半天资料才找到解决办法。现将方法记录如下,以免日后再次遇到时忘记了。办法十分简单,在f = open('XXX.txt','a+',encoding='utf-8') 里加上enco...
2018-06-22 15:07:31
1899
原创 Junit中double类型的比较
在写Junit单元测试的时候发现直接用assertEquals(double,double)比较时会发生错误。报错信息: The method assertEquals(double, double) from the type Assert is deprecatedjunit中没有assertEquals(double,double)的方法。因为double值是允许误差的。所以要实现doubl...
2018-06-22 14:57:36
2874
1
原创 Java中Override与Overload总结
最近在复习软件构造这门课,在第三章ADT与OOP的关于多态的课件中讲到了Override:重写与Overload:重载。现将二者区别总结如下(在翻译英文课件的基础上):重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法申明了一个检查异常 IOException,...
2018-06-22 14:52:29
201
原创 Java中的Map允许有重复元素吗?
Java中常见的三个集合接口:List、Set、Map,已经知道List中是允许有重复元素的,而Set中是不允许有重复元素的,那么Map中允许有重复元素吗?查阅资料,发现是不可以的,因为map是无序的,它的查询需要通过key的值来查找,如果你定义两个同样的key,那么一个key就对应了多个值,这样就违背了java对map的定义,键和值是一一对应的。所以key不可以重复。写个代码测试一下:packa...
2018-06-22 14:37:05
48069
原创 Java中的final关键字总结
在软件构造这门课的学习过程中,着重要求我们掌握ADT和OOP技术,而实现ADT的过程中又要求保持RI,避免Rep Exposure。故ADT的成员变量最好用private final 修饰,之前对final关键字不了解,这次正好查阅资料把这个问题搞清楚。总结如下:在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用...
2018-06-22 14:22:40
298
原创 第一篇博客,关于Java抽象类实例化
之前从来没有写过博客,所以这是一次新的尝试。第一次写作难免有缺陷,希望自己能越做越好。这次谈一谈抽象类能不能实例化new的问题,我们都知道在JAVA中,接口Interface是不能被new的。而在这次做实验的时候,遇到了抽象类,我一开始是不知道抽象类也是不能new的,后来经过编译器的提醒才知道。我就去查了一下相关资料,结果发现抽象类是可以实例化!但不是用new的方法实例化。引用:blog.sina...
2018-06-22 14:12:10
469
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人