|

楼主 |
发表于 2004-6-26 21:50:10
|
显示全部楼层
面开始按目的来看设计模式
第一个是创建型模式
上面说到创建型模式是为了怎样构造一个对象而产生的
创建型模式抽象了实例化过程 帮助一个系统独立于如果创建 组合和表示它的那些对象
类创建型模式使用继承改变被实例化的类 对象创建型模式将实例化托给另一个对象
在这些模式中有两个不断出现的主旋律
1 它们都将系统到底使用哪些具体类信息封装起来
2 它们隐藏了这些类的实例是如何被创建和放在一起的
整个系统关于这些对象知道的就是由抽象类定义的接口
(注意看到抽象类 也就是上面的原则中的针对接口而不是实现编程 使用抽象类可以把这个类的具体怎样实现放在子类中进行 而调用者只需要知道这个类有这样的功能就行了 举例如打印 调用者只要知道可以打印出来就可以 而不必知道是在屏幕上打印还是显示器上打印)
所以 创建型模式在什么被创建 谁创建它 它怎样被创建 及何时创建提供了很大的灵活性
创建型模式有如下五种
类创建型模式
1 工厂方法 factory method 定义一个用于创建对象的接口 让子类决定将哪一个类实例化
当你编译时不知道要实例化哪一个类 这时可以把类的创建放在子类中 提供专门的接口创建一个对象
在书中例子是application与document,application对不同的应用要使用不同的document,所以编译时不知道需要哪个 document子类 这时可以在application中提供createdocument接口 返回一个document对象指针
因为返回的是一个对象 所以叫工厂方法
对象创建型模式
2 抽象工厂abstract factory 提供一个创建一系列相关或是相互依赖对象的接口 而无需指定它们具体的类
如 界面的显示有不同的控件 如form button等 而这些控件都与具体的系统相关 也就是说 要使用其中一个就得和这组控件相配合
这时你定义一个抽象工厂类 把这些控件的构造都放在这个抽象工厂类中 当需要一个控件中 调用这个抽象工厂类提供的接口就可以了
但是 要怎样知道这些控件有什么功能呢 每个控件定义一个抽象类 声明它提供的功能
后面使用抽象类的指针来调用这个控件 问题解决
因为它像一个工厂一样生产出相似产品 而这些产品都是抽象类 所以叫抽象工厂
3 生成器builder 将一个复杂对象的构建与它的表示分离 使同样的构建过程可以创建不同的表示
builder模式有两个参与者 一个是生成器(builder) 负责生成新对象 另一个是导向器(director),
导向器分析转入的信息,处理后根据信息的内容调用生成器 生成器根据不同的信息内容生成不同的对象来保存这些信息
在书中是一个rtf文字阅读器 分析rtf模式文件后根据不同的信息创建不同的对象保存这些信息
4 原型prototype 用原型实例指定创建对象的种类 并通过拷贝这个原型来创建新的实合金
技术上的实现:根据一个已有的对象信息clone产生新对象
5 单件singleton,保证一个类只有一个实例 并提供访问它的一个全局访问点
这个技术没有什么难度的 就是需要把构造函数都定义成非public,只要构造函数非public就不可以被再构造 所以后面可以使用其它方面创建一个实例
书上使用静态变量与静态函数的方法来提供全局调用接口 |
|