设计模式之简单工厂模式
2018-06-17 22:32:02来源:未知 阅读 ()
1、编制类图
2、打开vs2010
3、 依次点击菜单“文件(F)”>新建(N)>”项目(P)”,弹出下面对话框:
4、 在弹出的对话框中,在模板选项下选择“Visual C#”->“Windows”选项,最后选择“控制台应用程序”。
5、 在名称文本(N)框中输入项目名称“SimpleFactorySample”,解决方案名称命名为“SimpleFactorySample”,并设置保存路径。
6、其它项取默认值,然后点击“确定按钮”,将生成下面的解决方案。
7、 新建Chart类:抽象图表接口,充当抽象产品类。
8、新建HistogramChart类,表示柱状图类,充当具体产品类。
using System;
namespace SimpleFactorySample
{
class HistogramChart : Chart
{
public HistogramChart()
{
Console.WriteLine("创建柱状图"!);
}
public void Display()
{
Console.WriteLine("显示柱状图!");
}
}
}
9、 新建PieChart类,表示饼状图类,充当具体产品类。
using System;
namespace SimpleFactorySample
{
class PieChart : Chart
{
public PieChart()
{
Console.WriteLine("创建饼状图!");
}
public void Display()
{
Console.WriteLine("显示饼状图!");
}
}
}
10、 新建类LineChart,表示折线图类,充当具体产品类。
using System;
namespace SimpleFactorySample
{
class LineChart : Chart
{
public LineChart()
{
Console.WriteLine("创建折线图!");
}
public void Display()
{
Console.WriteLine("显示折线图!");
}
}
11、 创建图表工厂类ChartFactory,用于充当工厂类
using System;
namespace SimpleFactorySample
{
class ChartFactory
{
//静态工厂方法
public static Chart GetChart(string type)
{
Chart chart = null;
if (type.Equals("histogram"))
{
chart = new HistogramChart();
Console.WriteLine("初始化设置柱状图!");
}
else if (type.Equals("pie"))
{
chart = new PieChart();
Console.WriteLine("初始化设置饼状图!");
}
else if (type.Equals("line"))
{
chart = new LineChart();
Console.WriteLine("初始化设置折线图!");
}
return chart;
}
}
}
12、更新客户端测试类的代码
using System;
using System.Configuration;
namespace SimpleFactorySample
{
class Program
{
static void Main(string[] args)
{
/*
Product product;
product = Factory.GetProduct("A"); //通过工厂类创建产品对象
product.MethodSame();
product.MethodDiff();
*/
Chart chart;
//读取配置文件
string chartStr = ConfigurationManager.AppSettings["chartType"];
chart = ChartFactory.GetChart(chartStr); //通过静态工厂方法创建产品
chart.Display();
Console.Read();
}
}
}
新建并实现如下类:
using System;
namespace SimpleFactorySample
{
abstract class Product
{
//所有产品类的公共业务方法
public void MethodSame()
{
//公共方法的实现
}
//声明抽象业务方法
public abstract void MethodDiff();
}
class ConcreteProductA : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}
class ConcreteProductB : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}
class Factory
{
//静态工厂方法
public static Product GetProduct(string arg)
{
Product product = null;
if (arg.Equals("A"))
{
product = new ConcreteProductA();
//初始化设置product
}
else if (arg.Equals("B"))
{
product = new ConcreteProductB();
//初始化设置product
}
return product;
}
}
}
namespace SimpleFactorySample
{
/*
abstract class Product
{
public abstract void Process();
}
class ConcreteProductA : Product
{
public override void Process()
{
//......
}
}
class ConcreteProductB : Product
{
public override void Process()
{
//......
}
}
class Factory
{
public static Product CreateProduct(char type)
{
switch(type)
{
case 'A':
return new ConcreteProductA(); break;
case 'B':
return new ConcreteProductB(); break;
//......
}
}
}
*/
}
13、 编译及运行程序,输出如下结果:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Asp_基础之C#基础
- python爬虫学习之用Python抢火车票的简单小程序 2019-08-13
- 用python写一个简单的文件上传 2019-07-24
- concurrent.futures模块简单介绍(线程池,进程池) 2019-07-24
- ORM 2019-07-24
- celery 分布式异步任务框架(celery简单使用、celery多任务结 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash