(3)抽象工厂模式

一:抽象工厂模式的优点

          --->抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。

       --->假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开 来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。

       --->通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构中的多个产品族中的产品对象的创建问题。

二:抽象工厂模式的缺点

  --->

三:应用场景

        --->/**
 * 抽象工厂
 * @author sxf
 * 产品等级概念:intel的cpu 和amd的cpu是一个产品等级的。
 *                                                  intel的主板 和amd的cpu是一个产品等级的。
 *
 * 产品族的概念:intel的cpu 和主办 是一个产品族的
 *                                                  amd的cpu 和主板 是一个产品族的。
 *
 * 简单工厂模式:[纵向划分]
 *                            (1)面对的生成同一个等级的不同产品。比如:传入不同参数,生成intel的cpu或是amd的cpu
 *                            (2)只有一个核心工厂类,判断比较多,业务复杂,扩展改变核心类,麻烦。
 *
 * 工厂方法模式:[纵向划分]
 *                                (1)面对的生成同一个等级的不同产品。
 *                                (2)一个产品有一个自己的工厂类。新增加一个产品,就多一个具体的工厂类。
 * (3)产品单一,属于一个等级的产品
 *
 * 抽象工厂模式:[横向划分]
 *                                (1)面对的生成同一个族的产品
 *                                (2)一个产品族有一个自己的工厂类。
 *  (3)intel的工厂:生产cpu,主板,内存。amd的工厂:生产cpu,主板,内存
 *
 */

四:抽象工厂模式的角色演变

 

五:抽象工厂模式的代码示例

[1]抽象工厂

 1 package com.yeepay.sxf.interfaces;
 2 /**
 3  * 抽象工厂
 4  * @author sxf
 5  *  产品等级概念:intel的cpu 和amd的cpu是一个产品等级的。
 6  *                           intel的主板 和amd的cpu是一个产品等级的。
 7  *
 8  * 产品族的概念:intel的cpu 和主办 是一个产品族的
 9  *                           amd的cpu 和主板 是一个产品族的。
10  *
11  * 简单工厂模式:[纵向划分]
12  *                (1)面对的生成同一个等级的不同产品。比如:传入不同参数,生成intel的cpu或是amd的cpu
13  *                (2)只有一个核心工厂类,判断比较多,业务复杂,扩展改变核心类,麻烦。
14  *
15  * 工厂方法模式:[纵向划分]
16  *                 (1)面对的生成同一个等级的不同产品。
17  *                 (2)一个产品有一个自己的工厂类。新增加一个产品,就多一个具体的工厂类。
18  *
19  * 抽象工厂模式:[横向划分]
20  *                 (1)面对的生成同一个族的产品
21  *                 (2)一个产品族有一个自己的工厂类。intel的工厂:生产cpu,主板,内存。amd的工厂:生产cpu,主板,内存
22  *
23   */
24 public interface AbstartFactoryForGroup {
25     /**
26      * 创建cpu的部门
27      * @param cpu
28      * @return
29      */
30     public Cpu create(String cpu);
31     /**
32      * 创建主板的部门
33      * @param cpu
34      * @return
35      */
36     public ZhuBan create(Cpu cpu);
37 }

View Code

[2]不同的工厂

 1 package com.yeepay.sxf.interfaces.impl;
 2
 3 import com.yeepay.sxf.interfaces.AbstartFactoryForGroup;
 4 import com.yeepay.sxf.interfaces.Cpu;
 5 import com.yeepay.sxf.interfaces.ZhuBan;
 6
 7 /**
 8  * intel的工厂
 9  * @author sxf
10  *
11  */
12 public class IntelFactory implements AbstartFactoryForGroup{
13     /**
14      * 创建cpu
15      */
16     @Override
17     public Cpu create(String cpu) {
18         // TODO Auto-generated method stub
19         return null;
20     }
21     /**
22      * 创建主板
23      */
24     @Override
25     public ZhuBan create(Cpu cpu) {
26         // TODO Auto-generated method stub
27         return null;
28     }
29 }
30
31
32 package com.yeepay.sxf.interfaces.impl;
33
34 import com.yeepay.sxf.interfaces.AbstartFactoryForGroup;
35 import com.yeepay.sxf.interfaces.Cpu;
36 import com.yeepay.sxf.interfaces.ZhuBan;
37 /**
38  * AMD的工厂
39  * @author sxf
40  *
41  */
42 public class AmdFactory implements AbstartFactoryForGroup{
43
44     @Override
45     public Cpu create(String cpu) {
46         // 创建其cpu的实现
47         return null;
48     }
49
50     @Override
51     public ZhuBan create(Cpu cpu) {
52         //创建其主板的实现
53         return null;
54     }
55
56
57 }

View Code

[3]产品接口

 1 package com.yeepay.sxf.interfaces;
 2 /**
 3  * cpu接口
 4  * @author sxf
 5  *
 6  */
 7 public interface Cpu {
 8         public String readNeicun(String neicun);
 9 }
10
11
12 package com.yeepay.sxf.interfaces;
13 /**
14  * 主板接口
15  * @author sxf
16  *
17  */
18 public interface ZhuBan {
19     public String readCpu(Cpu cpu);
20 }

View Code

 

时间: 2024-10-15 22:51:26

(3)抽象工厂模式的相关文章

抽象工厂模式

又碰到好文章了,忍不住就想转,这种风格幽默清新的文章很有借鉴意义.转自:http://www.cnblogs.com/cbf4life/archive/2009/12/23/1630612.html 抽象工厂模式 9.1 女娲的失误      我们在上一章节讲了女娲造人的故事.人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,哇K!忘记给人类定义性别了,那怎么办?抹掉重来,于是人类经过一次大洗礼,所有的人种都消

C# 设计模式----抽象工厂模式

原文地址:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性.但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是

php设计模式 — 抽象工厂模式

在什么情况下应当使用抽象工厂模式: 1.一个系统不应当依赖于产品类实例如何被创建.组合和表达的细节,这对于所有的形态的工厂模式都是重要的. 2.这个系统的产品有多余一个的产品族,而系统只消费其中某一个族的产品. 3.同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来. 4.系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现.     案例1: 还是以农场为例. 我们的农场分了多个产品线,一个是专门卖北方的蔬菜水果.一个专门卖南方的蔬菜水果.大家可

设计模式C#描述——抽象工厂模式

设计 设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构.那么为了将消费这些产品对象的责任和创建这些产品对象的责任分开,可以引进抽象工厂模式.这样的话,消费产品的客户不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品. 采用抽象工厂模式设计出的系统类图如下. 从上图可以看到,抽象工厂模式设计到以下的角色: 抽象工厂

抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/detail/u012515223/7403553 具体方法: 1. 提供一个抽象工厂(abstract factory)接口(interface)类, 不同的具体工厂(concrete factory)继承此类. 代码: /** * @time 2014年5月26日 */ package factory; /** * @author C.L.W

.NET抽象工厂模式微理解:教你在项目中实现抽象工厂

最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的同事和博友们理解.不足之处,还请斧正! 首先简单阐述一些三层的关系,相信观看该文章的博友们对于三层设计早已经是烂熟于心了,我这边就简单说明一下: 用户界面表示层(Web) 业务逻辑层(BLL) 数据访问层(DAL) 1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库

设计模式的C++实现之抽象工厂模式

解决的问题: 在系统里a,b,c三个组件必须同时使用,但是a的同类 a1和a2这三种方法有共同特点但是是互斥的 ,b,b1,b2和c,c1,c2和a/a1/a2是一样的.就比如说创建在不同操作系统的视窗环境下都能够运行的系统时,Unix下面有 unixButton和 unixText,Win下面也有winButton和winText,unixButton和unixText必须在一个系统unix里面用,而 winButton和winText只能在Win下面用.但是winButton和unixBut

解读设计模式----抽象工厂模式(AbstractFactory Pattern)

一.模式描述 我的程序中有需要一系列的对象,比如我们要吃一碗米饭(Rice),要喝一杯咖啡(Coffee)......,要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活.那么我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象呢? 这当然是可以的,根据GOF在<设计模式>一书里介绍,要创建对象这样的工作应该是属于创建型模式完成的.熟悉各种设计模式意图的朋友就会很快得

C#设计模式之抽象工厂模式新解

概述 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?这就是我们要说的抽象工厂模式. 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 模型图 逻辑模型: 物理模型: 生活中的例子 抽象工厂的目的是要提供一个创建一系列相关或

.NET设计模式(3):抽象工厂模式(Abstract Factory)

概述 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?这就是我们要说的抽象工厂模式. 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 模型图 逻辑模型: 物理模型: 生活中的例子 抽象工厂的目的是要提供一个创建一系列相关或