1.书籍
2.网站
http://www.jdon.com/designpatterns/index.htm
2.1factory模式分为 简单工厂,抽象工厂模式
简单工厂:一个工厂类,一个抽象产品类和多个具体产品类
抽象工厂:一个抽象工厂,多个具体工厂类,多个抽象产品类,多个抽象产品实现类
来个比喻:
一个农场中由一个人来管理农场中的所有产品,这就是简单工厂模式,这种模式只适合小的农场。
当农场规模扩大后,一个人来管理显示不合适,这时就需要多个人来管理,相当于有多个具体工厂类,每个人管理不同的产品,如张三管理大白菜,李四来管理苹果...
如果农场进一步扩大,比如大白菜这个品种,有北方的大白菜,有南方的大白菜,或者更多,其它的产品与大白菜类似,分成许多地域的品种,这时就要采用抽象工厂模式。
农场的抽象工厂模式:
一个抽象产品类,用来管理南方的产品,包括大白菜等
另一个抽象产品类,用来管理北方的产品,包括大白菜等
考虑很多情况下,在工厂方法中利用class.forName动态加载类来实现工厂方法
2,2Prototype.
其实就是clone方法
2.3Builder.
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件
在Java实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.
"池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能.修改Builder模式中Director类使之能诊断"断肢"断在哪个部件上,再修复这个部件.
2.4Singleton(单态模式)
2.5Facade
典型应用是数据库jdbc应用和EJB Facade
2.6Proxy
在出发点和目的地之间有一道中间层.
常见使用场合,
2.6.1授权机制.RMI.CORBA调用
2.6.2某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.
举例两个具体情况:
(1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.
(2)如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.
总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存. 所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系.
实现方式:比如有个接口Forum,一个真正的实现类DbForum和一个proxy实现类ProxyForum.利用ProxyForum权限鉴定后,再转给真正的DbForum
不改变对象接口。对对象使用施加控制。
2.7Adapter
改变所考虑对象接口。Swing中的windowAdapter
2.8Composite
文件夹目录
2.9Decorator
不改变对象接口。对装饰对象提供增强功能/。Java IO
IO中的FileReader.添加了新的功能.从业务上说可以动态插入
2.10Strategy
2.11template method
2.12observer模式
典型的mvc中利用了该模式
其他模式描述暂略,以后再补充