抽象工厂模式
来源:互联网 发布:excel未知网络错误 编辑:程序博客网 时间:2024/05/11 14:51
参考链接:http://blog.csdn.net/wyxhd2008/article/details/5597975
分析
抽象工厂模式同工厂模式类似,工厂模式的每一个工厂产生一个具体的产品。而抽象工厂的每一个工厂产生的是一个产品族,每一个族可能有很多小的产品产品组成,类似于一个完整的产品有许多小零件组成。也就是其他文章可能常说的抽象工厂模式中,一个工厂可以产生多个产品,这个是与工厂模式的区别。
例如:一把枪由枪身和弹夹组成,不管哪个工厂生产,必定需要生产枪身和弹夹。这样我们可以抽象出来两个产品。抽象枪身A,抽象弹夹B,可以抽象出来一个工厂AbstractFactory, 他包含两个抽象方法CreateA和CreateB,来生产枪身和弹夹。不同的枪,枪身和弹夹是不同,这样可以有多个具体的枪身类继承于抽象枪身A,多个具体的弹夹类继承抽象弹夹B。这样我们也就需要多个不同的工厂继承与抽象工厂AbstractFactory来生产枪身和弹夹,从而来组装成一把完成的枪。
(文字比较多,有时间我补一个流程图)
在我看来工厂模式和抽象工厂的模式是适用于不同的情形,没有优劣之分。两个模式对比如下:
逻辑结构
abstract class ProductA { public void Method() { //公共方法 } public abstract void MehodDiff(); } abstract class ProductB { public void Method() { //公共方法 } public abstract void MehodDiff(); } class ConcreteProductA1 : ProductA { public override void MehodDiff() { //自己的方法 } } class ConcreteProductA2 : ProductA { public override void MehodDiff() { //自己的方法 } } class ConcreteProductB1 : ProductB { public override void MehodDiff() { //自己的方法 } } class ConcreteProductB2 : ProductB { public override void MehodDiff() { //自己的方法 } } //抽象工厂 abstract class AbstarctFactory { public abstract ProductA CreateProductA(); public abstract ProductB CreateProductB(); } //具体工厂1(AB构成一个产品族) class ConcreteFactory1 : AbstarctFactory { public override ProductA CreateProductA() { return new ConcreteProductA1(); } public abstract ProductB CreateProductB() { return new ConcreteProductB1(); } } //具体工厂2(AB构成一个产品族) class ConcreteFactory2 : AbstarctFactory { public override ProductA CreateProductA() { return new ConcreteProductA2(); } public abstract ProductB CreateProductB() { return new ConcreteProductB2(); } }
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- JavaWeb与Asp.net工作原理比较分析
- PHP学习(wampServer+PhpStorm+XDebug)——环境相关配置参考(下)
- LVS-DR RR(轮询模式)搭建
- Android进阶之路
- Codeforces Round #404 (Div. 2):D. Anton and School
- 抽象工厂模式
- smart简介
- 浅谈volatile关键字
- NOIp 2015 运输计划 LCA
- spring AspectJ的Execution表达式-备忘笔记(转)
- phpstorm配置Xdebug进行调试PHP教程
- 触发window.open以后,父页面只显示因为“[object]”,其他的内容不见了
- nginx 搭建流媒体服务器 学习 一
- codeforces contest 750 c题