C#设计模式--抽象工厂模式(创建型模式)
一.抽象工厂模式:
在工厂模式中具体的产品和具体的工厂是一一对应的,一个工厂只能生产一种产品,结构单一,例如小米公司刚开始是只生产小米手机,但是伴随着公司的发展,他们需要生产不同型号的手机,也会生产路由器,小米电视等等,那么工厂方法模式已不能满足业务的需求了,此时我们就需要抽象工厂模式,即一个工厂可以生产多种产品。
抽象产品:负责定义抽象工厂生成的产品的接口,在本例中有两个抽象产品类,分别是手机和电视的抽象类
- 电视(抽象类)
- watchTV
- 手机(抽象类)
- 打电话
- 电视(抽象类)
public abstract class IMobilePhone
{
public abstract void dial();
}
public abstract class ITelevision
{
public abstract void watchTV();
}
抽象产品类
- 具体产品:负责实现抽象类的产
public class MobilePhone : IMobilePhone
{
private string name;
public MobilePhone(string name)
{
this.name = name;
Console.WriteLine("制作手机"+name);
}
public override void dial()
{
Console.WriteLine("使用" + name+"打电话");
}
}
public class Television : ITelevision
{
private string name;
public Television(string name)
{
this.name = name;
Console.WriteLine("制作电视"+name);
}
public override void watchTV()
{
Console.WriteLine("通过"+name+"看电视");
}
}
具体产品类
- 抽象工厂类抽象工厂角色是负责定义用于生成抽象产品的接口
public abstract class Factory
{
public static Factory getFactory(string classname)
{ Factory factory = null;
try
{
factory = (Factory)Assembly.Load("设计模式").CreateInstance("设计模式." + classname);
}
catch (Exception e)
{
Console.WriteLine("没有找到 " + classname + "类。");
}
return factory;
}
public abstract MobilePhone createMobilePhone(String type);
public abstract Television createTelevision(String type);
}
抽象工厂类
- 具体工厂类:实现抽象工厂的抽象方法生成产品
public class XiaoMiFactory:Factory
{
public override MobilePhone createMobilePhone(string type)
{
return new MobilePhone(type);
}
public override Television createTelevision(string type)
{
return new Television(type);
}
}
具体工厂类
下面实际测试一下:
static void Main(string[] args)
{
Factory factory = Factory.getFactory("XiaoMiFactory");
IMobilePhone mobilePhone1 = factory.createMobilePhone("小米2");
IMobilePhone mobilePhone2 = factory.createMobilePhone("小米5"); ITelevision television1 = factory.createTelevision("小米电视2");
ITelevision television2 = factory.createTelevision("小米电视3"); mobilePhone1.dial();
mobilePhone2.dial(); television1.watchTV();
television2.watchTV();
Console.ReadKey();
}
输出信息:
- 制作手机小米2
- 制作手机小米5
- 制作电视小米电视2
- 制作电视小米电视3
- 使用小米2打电话
- 使用小米5打电话
- 通过小米电视2看电视
- 通过小米电视3看电视
C#设计模式--抽象工厂模式(创建型模式)的更多相关文章
- 设计模式02: Abstract Factory 抽象工厂(创建型模式)
Abstract Factory 抽象工厂(创建型模式) 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题: -实现依赖 ...
- Abstract Factory 抽象工厂(创建型模式)
1.常规的对象创建方法(以更换QQ空间主题为例) (这里的常规对象指的是由于业务需求,当前实例化的对象有可能被其他相似的对象(有着共同的特性)所取代,例如更换手机铃声:一首歌取代另一首歌(词,曲,和声 ...
- 2.Abstract Factory 抽象工厂(创建型模式)之简单工厂
简单工厂 1.只有一个工厂(具体的,没有抽象) 2.只生产一种产品(抽象的产品) 3.这种产品可以有多种具体产品类型(派生) 代码实现 class Program { static void Main ...
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...
- Prototype原型模式(创建型模式)
1.原型模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只有一 ...
- 工厂方法模式——创建型模式02
1. 简单工厂模式 在介绍工厂方法模式之前,先介绍一下简单工厂模式.虽然简单工厂模式不属于GoF 23种设计模式,但通常将它作为学习其他工厂模式的入门,并且在实际开发中使用的也较为频繁. (1 ...
- 设计模式(五):PROTOTYPE原型模式 -- 创建型模式
1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对 ...
- 设计模式(二): BUILDER生成器模式 -- 创建型模式
1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式 ...
- java架构之路-(设计模式)五种创建型模式之单例模式
设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则. 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可 ...
- 设计模式(一): abstract factory抽象工厂模式 -- 创建型模式
1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要 ...
随机推荐
- Docker 使用samba 共享文件
Docker 使用samba 共享文件 docker run -it --name samba \ -p 139:139 -p 445:445 \ -v /home/develop/code/de ...
- 上传文件中文文件名乱码的解决方法以及iconv函数的使用
http://www.jb51.net/article/14530.htm 一般客户端是什么格式就展示什么格式,比如浏览器的UTF-8,windows的GBK
- Dev GridView RowCellClick事件与MouseDown事件
GridView处于可编辑状态,左键点击默认为“进入编辑”. 将GridView的OptionsColumn.AllowEdit设置为false后左键可触发RowCellClick.但有时候,既希望G ...
- 19. Remove Nth Node From End of List(C++,Python)
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- hbase数据库操作
.实验内容与完成情况:(实验具体步骤和实验截图说明) (一)编程实现以下指定功能,并用 Hadoop 提供的 HBase Shell 命令完成相同任务: () 列出 HBase 所有的表的相关信息,例 ...
- linux查看当前用户登陆信息
@(Linux基础)[linux查看当前用户登陆信息] linux查看当前用户登陆信息 作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正 ...
- SQL Server 如何更改SQL Server和windows身份方式验证
1.安装sql后先用windows账户登陆进去,然后在sql上右键,选择“安全性”-“SQL Server和windows身份验证模式”然后确定 2.找到安全性——登陆名(sa用户)右键——状态,在登 ...
- execlp启动android进程命令
execlp启动Android界面或service/广播参数设置 -n代表打开组件-d代表 data-a代表action 打开网页 调用am命令 if (sdkVersion >= 17) { ...
- 3DSMAX 卸载
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- C# List(T).Reverse 方法 顺序反转
using System; using System.Collections.Generic; public class Example { public static void Main() { L ...