摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.单例模式确保一个实例被创建,并且任意时刻都只有一个对象。它给了我们一个全局的访问点,又屏蔽了全局变量的缺点。可以被用来管理共享资源,比如数据库连接或线程池。特征是构造函数为私有,然后声明一个私有静态成员作为类对象,对外提供一个静态类方法创建该对象,在创建对象时会先判断是否已经创建,若是则直接返回已... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.我们在前边提到一个原则就是“面向接口而不要面向实现编程”,但是我们一直在使用Duck duck = new MallardDuck()这样的模式,后边的new语句却违反了这个原则。工厂方法就可以解决这个问题,它用来封装对象的创建。 2.这一节我们考虑如下场景:一个披萨店要制作各种各样的... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.这个模式可以称为“给爱用继承的人一个全新的设计眼界”的模式。牵扯到第五个设计原则:“类应该对扩展开放,而对修改封闭”。但是要注意,遵循这一标准会带来更多层次上的抽象,增加代码的复杂度,所以并不是所有类都要这样设计。 2.文中举了一个为辛巴克咖啡馆写一个计算咖啡价格+调料价格的类,使用了... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.我们需要理解报社、订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送或者邮寄给订报人新的报纸。然后,出版者+订阅者就是观察者模式,只不过名称不一样,主题(Subject,或者叫做Observabler)类比于出版者,是事件发生的主体,订阅者改称为观察者... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1)使用场景:一个对象可能要访问共享资源来完成它所要提供的服务,在多线程情况下,多个这样的对象在一起就会产生意想不到的后果,比如竞争。监视器就是在这样的一个对象上设置一个锁,以保证在给定时间内,只有一个线程可以执行这个对象上的任何一个方法。 2)例子:我们创建一个日志记录的类 public cla... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1)使用场景:牵涉到对数据对象进行修改时,可能由于修改的顺序而造成数据的错乱,此时使用不变对象就可以避免,而且还可以不使用高开销的synchronizing方法。一个数据模型类的实例所持有的数据在整个生命周期中都不变,这个类就会是线程安全。 2)设计方法: a)所有的实例变量都必须在... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ a)使用场景:在程序设计中,我们可以把所用要用到的常量设计为一个独立的类,使得对常量的管理有效清晰。 b)应用举例: 我们考虑一个顾客数据存储的应用场景,要用到三种类,Account, Address 和 CreditCard来代表用户数据信息。 ... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 本来不想写这个的,太基础了,不过为了整个学习笔记的完备性还是简单写几笔给自己留着看。 1.存取方法也就是所谓的getter and setter,对于类中的private成员提供对外的接口,这样的设计使得最后的在程序修改时只需要修改这些setter and getter,而不必工程中修改所有与这个... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.抽象类的特点: 包含至少一个以abstract表示的没有实现的方法——抽象方法,来代表父类中的可变方法。当然抽象类可以提供实现的具体方法。 包含的有具体实现的方法来代表父类中的不可变的通用方法。 不能被实例化。 子类继承时必须实现去所有抽象方法,... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ a)使用场景:解决多重继承和Client需要多Service_Provider的支持。 b)典型UML: c)举例:薪水计算类的设计 不同的类别有不同的薪水计算方法,那么getSalary方法可以抽象到一个接口SalaryCalculat... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.UML是Object Management Group推出的用于简化复杂软件工程流程的工具,使用UML,用户可以定制并且可视化软件和非软件的设计。注意UML只是一种建模语言,它只定义了words和grammar,而并没有定义建模的过程或流程。 2.上文中提到的静态模型和动态模型的分类也... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ KWIC作为一个早年间在ACM的Paper提出的一个问题,被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典。(From Wiki,FYI,D. L. Parnas uses a KWIC Index as an example on how to perform modular desi... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 初步: 1.传统的面向过程的结构化开发方法 Vs 以对象为最小系统的面向对象的开发方法 2.对象模型: 1)自底向上的抽象:抽象三层次 把问题领域中的事物抽象为具有特定属性和行为的对象。 把具有相同属性和行为的对象抽象为类 若多个类之间存在一些共性(具有相同的属性和行为)... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ // Create a Comparator that returns the outcome // of a reverse string comparison. class RevStrComp implements Comparator<String> { // Implem... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ // This Comparator uses a Collator to determine the// proper, case-insensitive lexicographical ordering// of two strings.class IgnoreCaseComp implement... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 方法可以采用正则表达在想要搜索的字符串前边构造(?i),表示大小写不敏感。例如,要搜索here,则构造(?i)here,表示here,Here,HERE等。但是这还会匹配there,我们还可以加上字符间隔符来表示一个单独的here单词, /b(?i)here/b。 使用String的matches( ... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ // Use split() to extract substrings from a string.class SplitDemo { static void showSplit(String[] strs) { for(String str : strs) System.out.... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ import java.util.ArrayList;import java.util.Iterator;public class Practice { public static void main(String[] args) { int[] ary=new int [6]; ... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ import java.util.ArrayList;public class Autoboxing { public static void main(String[] args) {// 手动打包,解决容器类无法放置基本数据类型的问题 Integer intval... 阅读全文
摘要:
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.使用方法 package tips; public interface Constants { public static final int PORT_NUMBER = 90; public static final String APP_NAME = "DOOL... 阅读全文