抽象工厂模式
来源:互联网 发布:刀剑乱舞极化胁差数据 编辑:程序博客网 时间:2024/06/07 06:25
工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。
产品等级结构与产品族
在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、电冰箱、空调等多种电器,而不是只生产某一种电器。为了更好地理解抽象工厂模式,我们先引入两个概念:
(1) 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。
(2) 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、海尔电冰箱构成了一个产品族。
抽象工厂模式概述
抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;/////////////////////////////////////// 抽象工厂模式 设计界面库框架/////////////////////////////////////namespace SkinKu{ /// <summary> /// 按钮接口: 抽象产品 /// </summary> interface Button { void display(); } /// <summary> /// Spring按钮类: 具体产品 /// </summary> class SpringButton : Button { public void display() { Console.WriteLine("显示浅绿色按钮"); } } /// <summary> /// summer按钮类: 具体产品 /// </summary> class SummerButton : Button { public void display() { Console.WriteLine("显示浅蓝色按钮"); } } /// <summary> /// 文本框接口: 抽象产品 /// </summary> interface TextField { void display(); } /// <summary> /// Spring 文本框 /// </summary> class SpringTextField : TextField { public void display() { Console.WriteLine("显示绿色边框文本框"); } } /// <summary> /// Summer文本框类: 具体产品 /// </summary> class SummerTextField : TextField { public void display() { Console.WriteLine("显示蓝色边框文本框"); } } /// <summary> /// 组合框接口 /// </summary> interface ComboBox { void display(); } /// <summary> /// Spring组合框类: 具体产品 /// </summary> class SpringComboBox : ComboBox { public void display() { Console.WriteLine("显示绿色边框组合框"); } } /// <summary> /// Summer组合框类: 具体产品 /// </summary> class SummerComboBox : ComboBox { public void display() { Console.WriteLine("显示蓝色边框组合框"); } } /// <summary> /// 界面皮肤工厂接口: 抽象工厂 /// </summary> interface SkinFactory { Button createButton(); TextField createTextField(); ComboBox createComboBox(); } /// <summary> /// Spring皮肤工厂: 具体工厂 /// </summary> class SpringSkinFactory : SkinFactory { public Button createButton() { return new SpringButton(); } public TextField createTextField() { return new SpringTextField(); } public ComboBox createComboBox() { return new SpringComboBox(); } } /// <summary> /// Summer皮肤工厂: 具体工厂 /// </summary> class SummerSkinFactory : SkinFactory { public Button createButton() { return new SummerButton(); } public TextField createTextField() { return new SummerTextField(); } public ComboBox createComboBox() { return new SummerComboBox(); } } class Program { static void Main(string[] args) { //使用抽象层定义 SkinFactory factory; Button bt; TextField tf; ComboBox cb; factory = new SummerSkinFactory();// factory = new SpringSkinFactory(); bt = factory.createButton(); tf = factory.createTextField(); cb = factory.createComboBox(); bt.display(); tf.display(); cb.display(); } }}
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- linux—rsync 配置与详解
- UVA - 673 Parentheses Balance
- 实拍草根模特的一天 饮食不规律常被性骚扰(图)
- linux 内存大小
- Extjs深入理解(一) 关于xtype 与 new
- 抽象工厂模式
- 汉澳sinox运行大杀器virtualbox让winxp回归
- 树的子结构
- 孙杨国歌门事件掀中日骂战 日本国歌有多难听你知道吗?
- 深度学习 Deep Learning 学习资料汇编 (持续更新中)。欢迎补充。
- Cocos2d-X实现场景切换
- hackerrank Halloween party
- CF #269 DIV2 A,B,C,D
- C++_虚函数