- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件体系结构 抽象工厂
设计模式
ABSTRACT FACTORY(抽象工厂)
1. 意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2. 别名
K i t
3. 动机
考虑一个支持多种视感(look-and-feel)标准的用户界面工具包。
4. 适用性
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
5. 结构
6. 参与者
AbstractFactory ( WidgetFactory )
— 声明一个创建抽象产品对象的操作接口。
ConcreteFactory ( MotifWidgetFactory,PMWidgetFactory )
— 实现创建具体产品对象的操作。
AbstractProduct ( Windows,ScrollBar)
— 为一类产品对象声明一个接口。
ConcreteProduct ( MotifWindow,MotifScrollBar )
— 定义一个将被相应的具体工厂创建的产品对象。
— 实现AbstractProduct接口。
Client
— 仅使用由AbstractFactory和AbstractProduct类声明的接口。
7. 协作
通常在运行时刻创建一个ConcreteFactroy类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。
AbstractFactory将产品对象的创建延迟到它的ConcreteFactory子类。
8. 效果
1) 它分离了具体的类:Abstract Factory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。
2) 它使得易于交换产品系列:一个具体工厂类在一个应用中仅出现一次—即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。在我们的用户界面的例子中,我们仅需转换到相应的工厂对象并重新创建接口,就可实现从Motif窗口组件转换为Presentation Manager窗口组件。
3) 它有利于产品的一致性:当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。而AbstractFactory很容易实现这一点。
4) 难以支持新种类的产品:难以扩展抽象工厂以生产新种类的产品。这是因为AbstractFactory接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂接口,这将涉及AbstractFactory类及其所有子类的改变。
抽象工厂—举例
已经开发的项目使用sql server 2000数据库。
但是在投入使用时,用户临时改变计划,使用免费的数据库 Access 2000.
不同之处:
引用空间
Sql server用:System.Data.SqlClient
Access用:System.Data.OleDb
Sql语句
Sql Server用:Insert,GetDate,SubString
Access用:Insert into,Now,Mid
class User
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
class SqlserverUser
{
public void Insert(User user)
{
Console.WriteLine(在Sqlserver中给User表增加一条记录);
}
public User GetUser(int id)
{
Console.WriteLine(在Sqlserver中根据ID得到U
您可能关注的文档
最近下载
- 2021年11月湖北省浠水县教师乡镇选调招聘考试《教育基础知识》真题试卷及标准答案.pdf VIP
- 树师德扬师风师德师风警示教育课件.pptx VIP
- 浙江省温州市“摇篮杯”2022-2023学年高一下学期化学竞赛试卷 含解析.docx VIP
- 徕卡TS30全站仪操作培训.pdf VIP
- 宜居宜业和美乡村建设项目可行性研究报告.docx
- 教育测量与评价第三版全套完整教学课件.pptx VIP
- 牦牛标准化育肥场布局及圈舍建设规范.docx VIP
- 锅炉烟气和空气焓及各成分(自动计算).xlsx VIP
- GB_T 42611-2023 非公路用旅游观光车辆制动性能试验方法.pdf VIP
- 犬伤暴露规范处理.pptx VIP
文档评论(0)