1月
10
2011
2

初学设计模式的一点感悟

最近几个星期的时间对设计模式做了入门学习,之前读过GoF的那本《设计模式》,感觉非常晦涩。在面向对象开发技术这门课中有设计模式的内容,这才重新拾起这个东西,发现比之前那次学明显容易多了。自己反思了一下,应该是和后来打好了比较好的面向对象思想的基础有关,所以也建议想要学习设计模式的朋友,先把面向对象的基本思想搞明白,起码得知道多态是干嘛用的,为什么要多态,多态有什么好处,这些问题可以看我之前写的那篇《浅谈多态机制的意义及实现》。然后再来学习设计模式,才算有迹可循。

本文是对设计模式的入门学习做一些感悟和分享,希望能和大家一起多多交流关于模式的心得。 (more…)

Written by Hesey Wang in: 技术,面向对象 |
12月
16
2010
13

浅谈多态机制的意义及实现

在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP。这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事。

多态并没有一个严格的定义,维基百科上给它下的定义比较宽松:

Subtype polymorphism, almost universally called just polymorphism in the context of object-oriented programming, is the ability of one type, A, to appear as and be used like another type, B.

一、子类型和子类

这里我想先提一下子类型(Subtype)这个词和子类(Subclass)的区别,简单地说,只要是A类运用了extends关键字实现了对B类的继承,那么我们就可以说Class A是Class B的子类,子类是一个语法层面上的词,只要满足继承的语法,就存在子类关系。 (more…)

Written by Hesey Wang in: Java,技术,面向对象 |
7月
27
2010
3

采用Builder模式构造对象

通常构造对象时,我们会采用构造函数的方式来对对象的参数进行初始化,例如:

Student stu = new Student(2010, "Hesey", 0, 10, "Software College");

但这种方式带来的问题是可读性很差,程序员必须很清楚构造函数中各个参数是什么及其顺序,如果光看上面这条语句,程序员或许会知道这可能是在创建一个学生对象并作其参数的初始化,但是参数究竟意味着什么,就必须去看源代码或是查阅文档了。

所幸的是,JavaBeans规范给我们提供了一个可读性更强的解决方案,通过一连串的get,set方法对参数进行获取或设置,此时对Student的创建可以改为如下代码:

Student stu = new Student();
stu.setId(2010);
stu.setName("Hesey");
stu.setSex(0);
stu.setDoor(10);
stu.setAddress("Software College");

运用JavaBeans的这种方式,大大增强了对象参数初始化的可读性,程序员很清楚地可以知道正在设置的是什么参数,并且不必遵循类似构造函数那样的参数顺序。

问题在于,在对对象初始化的过程中,显而易见,各个参数的初始化被放到了不同的方法调用中,这会导致严重的线程不安全问题(构造函数则不存在这个问题)。对象在一连串的set方法中,可能会出现状态不一致的情况,这是应该尽量避免的。 (more…)

Written by Hesey Wang in: Java,技术,面向对象 |

©2006 - 2016 Hesey (舒)