设计模式—简单工厂模式
2016-05-31 20:17
246 查看
简单工厂模式不属于GoF的23种经典设计模式。
一、定义
定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
在C#语言中,创建对象的四种方式:
1) 使用new关键字直接创建对象;
2) 使用反射机制创建对象;
3) 使用克隆方法创建对象;
4) 通过工厂类创建对象。
二、结构
(1)Factory(工厂类或工厂角色)
工厂类是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑。工厂类可以直接被外部调用,创建所需要的产品对象。
(2)Product(抽象产品类)
它是工厂类所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
(3)ConcreteProduct(具体产品类)
是简单工厂模式的创建目标,是创建的具体实例对象。
三、应用实例
抽象产品类Chart.cs
interfaceChart
{
voidDisplay();
}
具体产品类(包含HistogramChart.cs、PieChart.cs和LineChat.cs三个文件)
classHistogramChart :
Chart
{
publicHistogramChart()
{
Console.WriteLine("创建柱状图");
}
publicvoidDisplay()
{
Console.WriteLine("显示柱状图");
}
}
classPieChart :
Chart
{
publicPieChart()
{
Console.WriteLine("创建饼状图");
}
publicvoidDisplay()
{
Console.WriteLine("显示饼状图");
}
}
classLineChart :
Chart
{
publicLineChart()
{
Console.WriteLine("创建折线图");
}
publicvoidDisplay()
{
Console.WriteLine("显示折线图");
}
}
工厂类(该类中要对类型进行判断)
classChartFactory
{
publicstaticChart GetChart(string type)
{
Chart chart =
null;
if(type.Equals("histogram"))
{
chart = new
HistogramChart();
Console.WriteLine("初始化设置柱状图");
}
elseif(type.Equals("pie"))
{
chart = new
PieChart();
Console.WriteLine("初始化设置饼状图");
}
elseif(type.Equals("line"))
{
chart = new
LineChart();
Console.WriteLine("初始化设置折线图");
}
returnchart;
}
}
客户端测试类(Program.cs文件)
classProgram
{
staticvoidMain(string[] args)
{
Chart chart;
chart = ChartFactory.GetChart("histogram");//通过静态工厂方法创建产品
chart.Display();
Console.Read();
}
}
说明:要在客户端进行操作时,每次都要修改成所需的类型。
四、简单工厂模式的优点
(1)工厂类包含必要的判断逻辑;实现了对象创建和使用的分离。
(2)客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
(3)简单模式提高了灵活性。
五、简单工厂模式的缺点
(1)工厂类集中了所有产品的创建逻辑,职责过于繁重。
(2)简单工厂模式会增加系统中类的个数,增加了系统的复杂度和理解的难度。
(3)使得系统的扩展性降低。
(4)简单工厂模式中使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。C#语言中,不能通过类的实例对象来访问静态方法和静态变量。
一、定义
定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
在C#语言中,创建对象的四种方式:
1) 使用new关键字直接创建对象;
2) 使用反射机制创建对象;
3) 使用克隆方法创建对象;
4) 通过工厂类创建对象。
二、结构
(1)Factory(工厂类或工厂角色)
工厂类是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑。工厂类可以直接被外部调用,创建所需要的产品对象。
(2)Product(抽象产品类)
它是工厂类所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
(3)ConcreteProduct(具体产品类)
是简单工厂模式的创建目标,是创建的具体实例对象。
三、应用实例
抽象产品类Chart.cs
interfaceChart
{
voidDisplay();
}
具体产品类(包含HistogramChart.cs、PieChart.cs和LineChat.cs三个文件)
classHistogramChart :
Chart
{
publicHistogramChart()
{
Console.WriteLine("创建柱状图");
}
publicvoidDisplay()
{
Console.WriteLine("显示柱状图");
}
}
classPieChart :
Chart
{
publicPieChart()
{
Console.WriteLine("创建饼状图");
}
publicvoidDisplay()
{
Console.WriteLine("显示饼状图");
}
}
classLineChart :
Chart
{
publicLineChart()
{
Console.WriteLine("创建折线图");
}
publicvoidDisplay()
{
Console.WriteLine("显示折线图");
}
}
工厂类(该类中要对类型进行判断)
classChartFactory
{
publicstaticChart GetChart(string type)
{
Chart chart =
null;
if(type.Equals("histogram"))
{
chart = new
HistogramChart();
Console.WriteLine("初始化设置柱状图");
}
elseif(type.Equals("pie"))
{
chart = new
PieChart();
Console.WriteLine("初始化设置饼状图");
}
elseif(type.Equals("line"))
{
chart = new
LineChart();
Console.WriteLine("初始化设置折线图");
}
returnchart;
}
}
客户端测试类(Program.cs文件)
classProgram
{
staticvoidMain(string[] args)
{
Chart chart;
chart = ChartFactory.GetChart("histogram");//通过静态工厂方法创建产品
chart.Display();
Console.Read();
}
}
说明:要在客户端进行操作时,每次都要修改成所需的类型。
四、简单工厂模式的优点
(1)工厂类包含必要的判断逻辑;实现了对象创建和使用的分离。
(2)客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
(3)简单模式提高了灵活性。
五、简单工厂模式的缺点
(1)工厂类集中了所有产品的创建逻辑,职责过于繁重。
(2)简单工厂模式会增加系统中类的个数,增加了系统的复杂度和理解的难度。
(3)使得系统的扩展性降低。
(4)简单工厂模式中使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。C#语言中,不能通过类的实例对象来访问静态方法和静态变量。
相关文章推荐
- OS_ioStream
- ofbiz详解(Java开放电子商务平台)
- 立体类族共有的抽象类
- Android开发陷阱:利用PendingIntent传递唯一的Intent
- php项目开发经验-2个月学习php经历
- HDU 5363 Key Set
- 操作系统知识点整理
- 伯克利大学“机器学习(Practical Machine Learning)"课件及相关资料
- 从重庆滴滴和出租车争扯 看共享经济“转正困境”
- OC视频教程29课-第01讲 Classes
- Middle-题目123:335. Self Crossing
- Android图像处理(一)色调、饱和度、亮度
- iOS库的介绍以及如何使用CocoaPods管理库(2016最新版本)
- IOS面试题
- 地图 大头针
- C 字符串中sizeof() 和 strlen()
- 工资数组类
- HDU 4568 Hunter
- Guice 注入--(privateModule,intall(),expose())
- CF_602A - Two Bases(进制转换—水题)