C# 设计模式巩固 - 抽象工厂模式
前言
继续工厂模式高级版,抽象工厂模式。抽象工厂模式其实是从工厂方法模式拓展而来。在实际的生活中一个工厂的产品不可能是单一的,肯定是多种系列的产品。
介绍 - 抽象工厂模式
定义:(摘自百度百科~)为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
实现
继续上一篇的某淘鞋厂的例子。现在鞋厂的生意越做越大甚至还开了分厂,老板现在决定拓展业务,买衣服...夏天买T-Shirt,冬天买棉衣,下面看实现:
1.衣服
/// <summary>
/// 衣服基类
/// </summary>
public abstract class Clothes
{
public abstract string Name { get; }
}
/// <summary>
/// T恤衫
/// </summary>
public class TShirt : Clothes
{
public override string Name
{
get
{
return "T恤衫";
}
}
}
/// <summary>
/// 夹克衫
/// </summary>
public class Jacket : Clothes
{
public override string Name
{
get
{
return "夹克衫";
}
}
}
2.鞋子
/// <summary>
/// 鞋子基类
/// </summary>
public abstract class Shoes
{
public abstract string Name { get; }
} /// <summary>
/// 凉鞋
/// </summary>
public class Sandal : Shoes
{
public override string Name
{
get
{
return "凉鞋";
}
}
}
/// <summary>
/// 棉鞋
/// </summary>
public class CottonPaddedShoes : Shoes
{
public override string Name
{
get
{
return "棉鞋";
}
}
}
3.工厂
/// <summary>
/// 抽象工厂类
/// </summary>
public abstract class Factory
{
/// <summary>
/// 生产鞋子
/// </summary>
/// <returns></returns>
public abstract Shoes CreateShoes();
/// <summary>
/// 生成衣服
/// </summary>
/// <returns></returns>
public abstract Clothes CreateClothes();
}
/// <summary>
/// 夏季工厂类
/// </summary>
public class SummerFactory : Factory
{
public override Clothes CreateClothes()
{
return new TShirt();
} public override Shoes CreateShoes()
{
return new Sandal();
}
}
/// <summary>
/// 冬季工厂类
/// </summary>
public class WinterFactory : Factory
{
public override Clothes CreateClothes()
{
return new Jacket();
} public override Shoes CreateShoes()
{
return new CottonPaddedShoes();
}
}
调用:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("夏季工厂生产...");
//夏季工厂
Factory factory = new SummerFactory();
//制造鞋子,衣服
Shoes shoes = factory.CreateShoes();
Clothes cloth = factory.CreateClothes();
//看看生产的是
Console.WriteLine("生产:{0},{1}", shoes.Name, cloth.Name); Console.WriteLine("冬季工厂生产...");
//冬季工厂
Factory factory1 = new WinterFactory();
//制造鞋子
Shoes shoes1 = factory1.CreateShoes();
Clothes cloth1 = factory1.CreateClothes();
//看看生产的是
Console.WriteLine("生产:{0},{1}", shoes1.Name, cloth1.Name);
Console.Read(); }
}
结果:

欢迎批评指正,转载请注明出处 http://www.cnblogs.com/xinwang/p/6346792.html
C# 设计模式巩固 - 抽象工厂模式的更多相关文章
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- php设计模式之抽象工厂模式
之前总结了一下工厂模式,其实准确地说是简单 工厂模式,在它的基础上再进行抽象就可以得到一种新的模式:抽象工厂模式. 专业一点的定义为: 抽象工厂模式(Abstact Factory)是一种常见的软件设 ...
- 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- C#设计模式(4)-抽象工厂模式
引言 上一篇介绍了设计模式中的简单工厂模式-C#设计模式(3)-工厂方法模式,本篇将介绍抽象工厂模式: 抽象工厂模式简介 抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依 ...
- C#设计模式之四抽象工厂模式(AbstractFactory)【创建型】
一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了 ...
- Head First设计模式之抽象工厂模式
一.定义 给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足一下条件: 1)系统中有多个产品族,而系统一次只可能消费其中一族产品. 2)同属于同一个 ...
- 【Unity与23种设计模式】抽象工厂模式(Abstract Factory)
GoF中定义: "提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类." 意思就是 根据不同的执行环境产生不同的抽象类子类 抽象工厂模式经常在面试中会涉及到 下面的例 ...
随机推荐
- (译)Windows Azure:移动后端开发的主要更新
Windows Azure:移动后端开发的主要更新 这周我们给Windows Azure释出了一些很棒的更新,让云上的移动应用开发明显的简单了.这 些新功能包括: 移动服务:定制API支持移动服务:G ...
- Java程序运行在Docker等容器环境有哪些新问题
基本回答 一. 对于Java来说,Docker毕竟是一个较新的环境,其内存.CPU等资源限制是通过ControlGroup实现的.早期的JDK版本并不能识别这些限制,进而会导致一些基础问题. 1.如 ...
- java中hashSet原理
转自: http://blog.csdn.net/guoweimelon/article/details/50804799 HashSet是JavaMap类型的集合类中最常使用的,本文基于Java1. ...
- PHP秒杀系统全方位设计分析(二)
商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...
- Spring提前加载与懒加载
首先,Spring默认是提前加载,这意味着当项目启动,spring初始化,spring会把所有的扫描包下的 ,所有带spring 注解(@Component.@Repository.@Service. ...
- RocEDU.阅读.写作《苏菲的世界》书摘(五)
在谈到如何获取确实的知识时,当时许多人持一种全然怀疑的论调,认为人应该接受自己一无所知事实.但笛卡尔却不愿如此.他如果接受这个事实,那他就不是一个真正的哲学家了.他的态度就像当年苏格拉底不肯接受诡辩学 ...
- java语言学习笔记1
最近也在春节的节假日里,总是会有各种各样的事情出现,没有很完整的时间来学习java以及其他方面的知识. 从昨天开始有了完整的学习体系,我去娄老师推荐的极客学院网站开始学习java语言的语法.在假期之初 ...
- LCD1602
一.关于LCD1602: 在编写LCD1602程序前,我们必须了解其手册上一些非常重要的信息,如果这些信息不能理解透彻,编程可能会遇到或多或少的问题,在此先大致归纳几点. 1.管脚: 1602共16个 ...
- COGS314. [NOI2004] 郁闷的出纳员
★★★ 输入文件:cashier.in 输出文件:cashier.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] OIER公司是一家大型专业化软件公司,有着数 ...
- 【转】获取Windows系统明文密码神器
前序 电脑密码忘记了可以用本工具找回,前提是你能进入系统,例如本机保存了远程服务器登录的密码或借别人的电脑,而忘记了密码:mimikatz 2.0工具正好解决了你的问题. 工具下载 binaires ...