Abstract Factory 抽象工厂模式

Abstract Factory抽象工厂模式抽象工厂模式:提供接口以 创建一组 相关/ 相互依赖的对象 ,但不需要指明其具体类。现在有以下抽象产品接口和具体产品类://AbstractProductpublic interface Window{    public void setTitle(S...

2018-06-23 22:18:10

阅读数 26

评论数 0

Factory Method pattern 工厂方法模式

Factory Method pattern工厂方法模式当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。代码示例:有个抽象产品;public in...

2018-06-23 21:35:49

阅读数 31

评论数 0

Adapter 适配器模式

Adapter适配器模式将某个类/ 接口转换为client 期望的其他形式,通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。目的是为了包装原来的类。代码示例:不用Adapter模式:class LegacyRectangle {    void displa...

2018-06-23 20:44:04

阅读数 29

评论数 0

Iterator Pattern迭代器模式

Iterator Pattern迭代器模式:首先了解两个接口:1. Iterable接口:实现该接口的集合对象是可迭代遍历的public interface Iterable<T> {    ...    Iterator<T&am...

2018-06-23 17:59:04

阅读数 29

评论数 0

Composition(组合)与Aggregation(聚合)

Composition(组合)与Aggregation(聚合)的区别:1. 若论两种关系表示的强弱程度,Composition应该更强一些,这也是为什么在图中会以一个实心菱形来代表。反之,聚合使用的是空心菱形。见下图.2. Composition表示的是'Part-of'的关系, 以图1为例,En...

2018-06-23 13:52:44

阅读数 32

评论数 0

CRP原理的简单例子

CRP:英文全名Composite Reuse Principle,译为复合的复用原则。可以解释为类应该通过复合的使用(包含实现所需功能的其他类的实例)实现多态行为和代码重用,而不是从基或父类继承。代码示例:class Employee {     BonusCalculator bc;     ...

2018-06-23 11:36:12

阅读数 353

评论数 0

将继承Inheritance变为委派Delegation的方法

将继承Inheritance变为委派Delegation的方法;什么时候这么做?如果子类只需要复用父类中的一小部分方法,可以不需要使用继承,而是通过委派机制来实现。方法:在新类中创建一个父类型的域,写方法时使用这个父类型的方法,就实现了所谓的委派。代码示例 :原来是继承关系:class RealP...

2018-06-23 11:16:49

阅读数 21

评论数 0

排序的两种方法

如果ADT需要比较大小,或者要放入Collections或Arrays进行排序,可实现Comparator接口并override compare()函数。第一种:构建一个新的Comparator类,重写compare()函数,在客户端直接调用静态函数Collections.sort(XXX,新的C...

2018-06-23 10:52:40

阅读数 57

评论数 0

mutable数据类型的等价性

mutable类型数据的等价性可以分为2种:观察等价性和行为等价性观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致行为等价性:调用对象的任何方法都展示出一致的结果对可变类型来说,往往倾向于实现严格的观察等价性,对不可变类型来说,不存在行为等价性,只存在观察等价性,因为不可变类...

2018-06-22 22:11:41

阅读数 30

评论数 0

关于hashcode里面使用31系数的原因

hashcode其实就是散列码,使用hashcode使用高效率的哈希算法来定位查找对象。我们在使用容器来存储数据的时候会计算一串散列码,然后将数据放入容器。如:String s =“java”,那么计算机会先计算散列码,然后放入相应的数组中,数组的索引就是从散列吗计算来的,然后再装入数组里的容器里...

2018-06-22 18:02:00

阅读数 218

评论数 0

Java重写hashcode的标准

hashCode是指在hash maps中使用的哈希码,一旦equals()方法被重写,则hashCode()方法也必须被重写。当equals方法中涉及的参数没有改变时,hashCode应保持不变。如果根据equals方法,两个对象是相等的,那么这两个对象的hashCode应该一样。两个对象如果不...

2018-06-22 17:51:09

阅读数 44

评论数 0

java.lang.NullPointerException解决办法

最近在编程过程中经常遇到java.lang.NullPointerException的报错信息,主要是因为空指针引用异常,总结了几次经验后发现主要有以下几种情况:1.字符串变量未初始化; 如Sting s;这时在后面的处理过程中就可能会报错。2.接口类型的对象没有用具体的类初始化List lt; ...

2018-06-22 17:18:46

阅读数 1587

评论数 0

关于Python中出现UnicodeEncodeError的解决办法

之前用Python写爬虫小程序时遇到了这样的报错:UnicodeEncodeError: ‘gbk’ codec can’t encode character,感觉是文件编码格式的问题,但是就是不知道怎么解决,后来查了半天资料才找到解决办法。现将方法记录如下,以免日后再次遇到时忘记了。办法十分简单...

2018-06-22 15:07:31

阅读数 135

评论数 0

Junit中double类型的比较

在写Junit单元测试的时候发现直接用assertEquals(double,double)比较时会发生错误。报错信息: The method assertEquals(double, double) from the type Assert is deprecatedjunit中没有assert...

2018-06-22 14:57:36

阅读数 207

评论数 0

Java中Override与Overload总结

最近在复习软件构造这门课,在第三章ADT与OOP的关于多态的课件中讲到了Override:重写与Overload:重载。现将二者区别总结如下(在翻译英文课件的基础上):重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写方法不能抛出新的检查异...

2018-06-22 14:52:29

阅读数 24

评论数 0

Java中的Map允许有重复元素吗?

Java中常见的三个集合接口:List、Set、Map,已经知道List中是允许有重复元素的,而Set中是不允许有重复元素的,那么Map中允许有重复元素吗?查阅资料,发现是不可以的,因为map是无序的,它的查询需要通过key的值来查找,如果你定义两个同样的key,那么一个key就对应了多个值,这样...

2018-06-22 14:37:05

阅读数 9003

评论数 0

Java中的final关键字总结

在软件构造这门课的学习过程中,着重要求我们掌握ADT和OOP技术,而实现ADT的过程中又要求保持RI,避免Rep Exposure。故ADT的成员变量最好用private final 修饰,之前对final关键字不了解,这次正好查阅资料把这个问题搞清楚。总结如下:在Java中,final关键字可以...

2018-06-22 14:22:40

阅读数 30

评论数 0

第一篇博客,关于Java抽象类实例化

之前从来没有写过博客,所以这是一次新的尝试。第一次写作难免有缺陷,希望自己能越做越好。这次谈一谈抽象类能不能实例化new的问题,我们都知道在JAVA中,接口Interface是不能被new的。而在这次做实验的时候,遇到了抽象类,我一开始是不知道抽象类也是不能new的,后来经过编译器的提醒才知道。我...

2018-06-22 14:12:10

阅读数 41

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭