JAVA设计模式初探(—)
所有代码均编写调试正确, Uml 图关系正确,参考自清华大学出版社的《 Java 设计模式》
1. 策略模式:
定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。
适用场景:
1. 一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。
2. 程序不希望暴露复杂的、与算法相关的数据结构,那么可以使用策略模式封装算法。
需要使用一个算法的不同变体。
策略模式实例网址: http://skhero2012.iteye.com/blog/1487106
2. 抽象工厂模式:
提供一个创建一系列或互相依赖对象的接口,而无须指定它们具体的类。
适用场景:
1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
2.这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
3.同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。(比如:Intel主板必须使用Intel CPU、Intel芯片组)
4.系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
抽象工厂模式实例网址: http://skhero2012.iteye.com/blog/1487113
3. 单例模式:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式实例网址: http://skhero2012.iteye.com/blog/1487117
4. 迭代器模式:
提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。
使用场景:
1. 让用户访问一个集合中的对象,但不想暴露对象在集合中的存储结构。
2. 希望对遍历不同的集合提供一个统一的接口。
迭代器模式实例网址:(暂时未更新)
5. 工厂方法模式:
定义一个用于创建对象接口,让子类决定实例化哪一个类。 Factory Method 使一个类的实例化延迟到其子类。
适用场景:
1. 用户需要一个类的子类的实例,但不希望与该类的子类形成耦合。
2. 用户需要一个类的子类的实例,单用户不知道该类有哪些子类可用。
工厂方法实例网址: http://skhero2012.iteye.com/blog/1487124
6. 命令模式:
将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
1.程序需要在不同的时刻指定、排列和执行请求
2.程序需要提供撤销操作
3.程序需要支持宏命令
命令模式实例网址: http://skhero2012.iteye.com/blog/1487211
7. 观察者模式:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并被自动更新。
1.当一个对象的数据更新时需要通知其他对象,但这个对象又不希望和被通知的那些对象形成紧耦合。
2.当一个对象的数据更新时,这个对象需要让其他对象也各自更新自己的数据,但这个对象不知道具体有多少个对象需要更新数据。
观察者模式实例网址: http://skhero2012.iteye.com/blog/1487132
8. 模板方法模式:
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
1.可以通过在抽象模板定义模板方法给出成熟的算法步骤,同时又不限制步骤的细节,具体模板实现算法细节不会改变整个算法骨架。
2.在抽象模板模式中,可以通过钩子方法对某些步骤进行挂钩,具体模板可以通过钩子可以选择算法骨架中的某些步骤。
模板方法模式实例网址:(暂时未更新)