Month: August 2008

常用设计模式的概括

接口型模式: Adapter:修改类的外部接口以满足客户期望 Facade:为一组类提供简单的接口 Composit:把树和树叶都定义在同一个抽象的接口中—树节点,我认为其主要作用是方便递归 Bridge:对一个总的接口来说,扩展(从逻辑角度理解,如 碗 扩展 餐具)使用一个类层次结构,实现(从物理角度理解,如金餐具、银餐具)使用另一个类层次结构。这两个类层次结构可以相互独立。也就是说,当富人变穷,将一套金餐具换成一套泥餐具后,他们全家仍然可以顺利执行吃饭喝汤的动作 责任型模式: Singleton:将责任集中到某个类的单个实例中 Observer:使某个对象不必关心有哪些对象依赖自己 Mediator:将责任集中到某个类中,这个类可以监视其他对象的交互 Proxy:使得一个对象代表另一个对象进行各种操作,代理者能够智能地将调用转发给另一个对象 Chain of Responsibility:能够允许一个请求沿着对象链不断向上提交,直到这个请求被某一级对象处理 Flyweight:将共享的细粒度对象的责任集中在一处 构造型模式: Builder:不解 Factory Method:推迟确定需要实例化的类 Abstract Factory:构造一系列具有某个特性的对象 Prototype:根据给定的例子创建一个对象 Menento:从对象的休眠版本重新创建对象,该休眠版本包含结对象的内部状态 非GOF模式: Monostate:采用构造分别构造的两个同类对象,其实仍是同一个对象。实现办法:限制对象的所有成员变量都是静态变量

如果 class loader在两个JAR包里发现了同名的类文件,那它装载哪一个?

菜鸟 15:59:27 如果 class loader在两个JAR包里发现了同名的类文件,那它装载哪一个?  大师w 16:03:50 看谁优先,装载谁 菜鸟z 16:03:57 啥叫优先? 菜鸟 16:01:53 同问 大师w 16:04:01 如果优先级一样,随机装载 大师w 16:04:10 class loader有3个优先级 菜鸟z 16:04:17 编译时间? 大师w 16:04:33 系统核心级别、系统class path,手动class path 大师w 16:05:06 如果是自己写的class loader,可以指定装载顺序的  

为什么要用Class.forName() 来装载 JDBC的驱动

    因为Class.forName除了像ClassLoader一样装载驱动类,还会初始化这个驱动类。初始化的一个重要环节就是调用类的静态方法(static代码块)。驱动类在静态方法里将自己注册到DriverManager,只有注册了,驱动才能发生作用。因此,不用Class.forName(驱动类),就不会初始化这个类,这个驱动就会出错,使用驱动的程序就不能正确地执行

设计 程序文件的组织结构 时要注意方便部署

1.应该把所有运行时配置(如轮询时间,而spring的接口注入则属于开发时配置)都集中到同一个根目录里,这样可以方便部署。一个Release中,有一部分是跟运行的环境有关的(如数据库地址、日志文件名等),有的是无关的(class文件,jsp文件,spring的接口注入等),我们把有关的部分集中一个根目录里,与无关的部分彻底分离,这样在部署时,无关的部分痛痛快快地用脚本做一次全量复制就行了 2. 如果一份程序的多个副本部署在多台机器上,除了要把运行环境相关部分和无关部分分开,对相关部分,也要区分各程序相同的部分和各程序不同的部分,如数据库的配置就各程序相同的,而日志文件路径和各采集器的配置就各不相同。还有一种配置,只在一个或多个程序中有意义并在这些程序中相同,但在其他程序中用不上,也可以视为各程序相同部分。通过这种区分,在部署时,对相同部分只须设定一次,然后用脚本复制多份即可