几个设计模式的学习备忘

来源:互联网 发布:java swing html布局 编辑:程序博客网 时间:2024/06/03 16:45

 

1       Factory Method:工厂方法

         1       对象创建型模式

         2       意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类

         3       别名:虚构造器

         4       动机:框架使用抽象类定义和维护对象间的关系,对象的创建由框架负责。但它只知道要创建的对象的抽象父类,而不知道具体哪种子类将被创建

         5       工厂方法:负责“生产”一个对象

         6       本质:用一个virtual method完成创建过程

         7       适用性:

                   1       当一个类不知道它所必须创建的对象的类的时候

                   2       当一个类不知道它所必须创建的对象的类的时候

 

2       Abstract Factory:抽象工厂

         1       对象创建型模式

         2       意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类

         3       别名:Kit

         4       动机:客户仅通过NotepadFactory接口创建Notepad的组件monitor/battery/cpu,它们并不知道哪些类创建了这些组件。即客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口

         5       适用性:

                   1       一个系统要独立于它的产品的创建、组合和表示时                                                                 2      一个系统要有多个产品系列中的一个来配置时

                   3       当你要强调一系列相关的产品对象的设计以便进行联合使用时

                   4       当你要提供一个产品类库,而只想显示它们的接口而不是实现时

         6       效果:

                   1       它分离了具体的类

                   2       它使得易于交换产品系列

                   3       有利于产品的一致性

                   4       难以支持新种类的产品

 

1-2   工厂方法与抽象工厂:总结

         1       Factory Method是基础,Abstract Factory是扩展

         2       Factory MethodAbstract Factory都设计到类层次结构中对象的创建过程

                   1       Factory Method需要依附一个Creater

                   2       Abstract Factory需要一个平行的类层次

 

3       Adapter(适配器模式)

         1       意图:将一个类的接口转换为客户希望的另外一个接口。Adapter可以使原本接口不兼容而不能一起工作的类可以一起工作

         2       动机:为复用而设计的工具箱类不能被复用的原因仅仅因为它的接口与专业应用领域所需要的接口不同

         3       适用性:

                   1       希望使用一个已存在的类,而它的接口不符合要求

                   2       想创建一个可复用的类,该类可以与不相干或不可预见的类协同工作

 

4       Observer(观察者模式)

         1       意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并被自动更新

         2       动机:需要维护相关对象间的一致性,且不希望为了维护一致性而使各类间紧密耦合,这样可以降低它们间的可重用性

 

5       MVCModel-View-Control

         1       MVC关系图

        

 

2       MVC关系图的理解

 

模型M

视图V

控制器C

分工

抽象系统应用的功能

抽象数据表达

抽象用户和系统的事件的语义映射

封装系统的状态

表示针对用户的数据

把用户的输入翻译为系统事件

提供使用系统功能的方法和路径

维护与Model数据的一致性

根据用户的输入和上下文情况选择合适的显示数据

管理数据的存储和一致性

 

 

当数据发生变化时通知相关部分

 

 

协作

当它改变系统数据时通知view

model表征给用户

把用户输入转变成对model的系统行为

能够被view检索数据

当数据被相关model改变时更新表示的数据

根据用户输入和model的动作结果选择合适的view

提供对controller的操作途径

把用户输入提交给controller

 

 

6       Iterator(迭代器模式)

         1       意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示

         2       动机:一个聚合对象(如list)应提供一种方法让别人可以访问其内部的元素,而又不暴漏内部结构。针对不同的需要,可以以不同的方式遍历该列表

         3       关键思想:将对列表的访问和遍历从列表中分离出来并放入一个迭代器(iterator)对象中。由迭代器定义一个访问该列表元素的接口。迭代器复杂跟踪跟踪当前的元素,即它知道哪些元素访问过了。

         4       效果:

                   1       支持以不同的方式遍历一个聚合对象;也可以自己定义迭代器的子类以支持新的遍历

                   2       迭代器简化了聚合的接口

                   3       在同一个聚合对象上可以有多个遍历,即可以同时进行多个遍历