标签:包含 att 柱状图 需要 出现 分享 pie uml override
简单工厂模式属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂的UML类图:
该模式包含的角色和职责:
抽象产品。简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体实例。
工厂。简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类可以被外界直接调用,创建所需的产品对象。
假设我们要开发一款支持多种图表的工具包,能够从中获取折线图(Line Chart)、柱状图(Bar Chart)、饼状图(Pie Chart)等,下面我们使用简单工厂模式来实现该功能。
public abstract class Chart
{
public abstract void Draw();
}
public class LineChart : Chart
{
public override void Draw()
{
string lineChart = "| \n";
lineChart += "| - \n";
lineChart += "| - \n";
lineChart += "| -- \n";
lineChart += "| -- \n";
lineChart += "| --- \n";
lineChart += "| --- \n";
lineChart += "| - \n";
lineChart += "|______________________________";
Console.WriteLine(lineChart);
}
}
public class BarChart : Chart
{
public override void Draw()
{
string barChart = "| \n";
barChart += "| __ \n";
barChart += "| | | __ \n";
barChart += "| __ | | | | \n";
barChart += "| | | | | __ | | \n";
barChart += "| | | | | | | | | \n";
barChart += "| | | | | | | | | \n";
barChart += "|____|__|____|__|____|__|____|__|_____";
Console.WriteLine(barChart);
}
}
public class PieChart : Chart
{
public override void Draw()
{
string lineChart = "| \n";
lineChart += "| ------------ \n";
lineChart += "| |***@@@@@@@@@| \n";
lineChart += "| |*****@@@@@@@@@| \n";
lineChart += "| |*******@@@@@@@@@| \n";
lineChart += "| |*********@@@@@@@@@| \n";
lineChart += "| |********$$$$$$$$| \n";
lineChart += "| |******$$$$$$$$| \n";
lineChart += "| |****$$$$$$$$| \n";
lineChart += "| ------------ \n";
lineChart += "|______________________________";
Console.WriteLine(lineChart);
}
}
public class ChartFactory
{
public Chart CreateChart(string type)
{
Chart chart;
switch (type)
{
case "L":
chart = new LineChart();
break;
case "B":
chart = new BarChart();
break;
case "P":
chart = new PieChart();
break;
default:
throw new KeyNotFoundException();
}
return chart;
}
}
当然,这里也可以利用静态方法创建一个工厂,因为在使用时我们不必再创建工厂对象,直接调用静态方法来实例化对象。但这也有缺点,即不能通过继承来改变创建方法的行为。
static void Main(string[] args)
{
ChartFactory factory = new ChartFactory();
var chart = factory.CreateChart("B");
chart.Draw();
Console.ReadLine();
}
dotnet-design-pattern_simplefactory
标签:包含 att 柱状图 需要 出现 分享 pie uml override
原文地址:https://www.cnblogs.com/Answer-Geng/p/8869563.html