`
H_eaven
  • 浏览: 31386 次
  • 性别: Icon_minigender_1
  • 来自: 鲨堡
文章分类
社区版块
存档分类
最新评论
文章列表
Observable提供必要的信息. Observer(Listener)则对Observer所提供的数据做自己感兴趣的处理 . 比如TimeSource提供时间这一数据,TimeSink可以获所得TimeSource提供的时间数据,有人可能要实现数字时钟,另外有人可能想使用所提供的时间实现一个提醒服务。还有人可能想启动每晚备份功能。简而言之,希望一个单一的TimeSource对象能够为多个TimeSink对象提供时间. Observable与Observer关系,如果1 : 1则可以做成依赖关系,  如果1 : n 则在Observable 内保存一个Observer的集合。 当然也可以利用 ...
What,Why,How,When;     Struts2 中获取request,response,session,application 的方式1,2, 1:(1)使用帮助类ActionContext的静态方法 ActionContext.getContext()   (2)使用ServletActionContext帮助类的静态方法,ServletActionContext.getRequest();                   ...
抽象类仍然一个类,这可能会影响到灵活性.因为 Java是单一继承. 接口的灵活性要更大. 接口可以模拟多重继承.(参见Spring BeanFactory接口体系的设计) 抽象类的后继演变要比接口更容易些,可以直接在抽象类里添加具体方法,但是接口会要求所有实现类都实现新添加的抽象方法. 抽象类的使用应该做为一种实现手段来用,而不是做为类的体系设计来用. 抽象类在设计时应该多的拥有代码,以增加代码的复用,要少的拥有数据,子类应该多的有数据. Java类型检查基于这样一个事实:每一变量的声明都给这个变量一个类型,每一个方法(和构造子)的声明都给出这个方法的特征。这样一来,Java编译器可以 ...
继承:使得相同的代码可以在不同类型之间得到复用. 多态:使得不同的代码可以以一种相同的方式得到调用. 继承可以做为复用的手段,但这不是继承的最大意义,继承的最大意义在于封装变化的代码,将变化的代码和不变的代码进行剥离,使得代码的维护性,扩展性,重用性得增强. 继承分为extends和implements. 在子类重写方法时,要注意到这有可能是在修改父类,违背LSP.  子类应该进可能去实现一个抽象方法,而不是去重写一个具体方法.
import java.util.*; //重构前:根据所给出的数字n,返回1-n之间的所有质数. class GeneratorPrimes { public static void main(String[] args) { long start = System.currentTimeMillis(); int[] a = PrimeGenerator.generate(10000000); long end = System.currentTimeMillis(); ...
// 程序1 class Singleton { private static Singleton obj = new Singleton(); public static int counter1; public static int counter2 = 0; private Singleton() { counter1++; counter2++; } public static Singleton getInstance() { return obj; } } // 程序2 public class MyMain { public static ...
public class Person { private int id; private String name; private String password; private double salary; private int hashCode; public Person(int id,String name,String password,double salary) { this.id = id; this.name = name; ...
代理模式:   public interface Interface { void doSomething(); void somethingElse(String arg); } public class RealSubject implements Interface { public void doSomething() { System.out.println("realSubject.doSomething()..."); } public void some ...
一个Singleton类如果可序列化,则除实现java.io.Serializable标记接口,还需定义private Object readResolve() throws ObjectStreamException; 如果没有第二步则在反序列化的时候会重新生成一个对象.因而失去了Singleton. 原因在于:反序化也相当于构造方法生成一次对象. import java.io.*; public class Thing implements Serializable { private int id; private String name; private st ...
public class Suit { private static int nextOrdinal = 0; private final int ordinal = nextOrdinal++; private final String name; private Suit (String name) { this.name = name; } public String toString() { return this.name; } public int ordinal( ...
内存泄漏:应用程序中保留了从不会再被使用的引用,引用未被释放,GC无法工作. import java.util.*; public class Test { private Object[] objs; private int count; public Test(int size) { objs = new Object[size]; count = 0; } public void addEle(Object obj) { objs[count] = obj; count++; } public ...
Global site tag (gtag.js) - Google Analytics