工厂方法模式->创建型设计模式
定义:定义一个创建对象的接口,但由子类决定需要实例化那一个类。(工厂模式是我们常用的实例化对象模式了,是用工厂方法代替new 操作的一种模式,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类。)
代码:
namespace ConsoleApp1
{
public class Program
{
static void Main(String[] args)
{
Console.WriteLine("选择形状绘制:");
shape sh1 = ShapeFactory.GetShape(ShapeType.Square);
sh1.draw();
shape sh2 = ShapeFactory.GetShape(ShapeType.Circle);
sh2.draw();
shape sh3 = ShapeFactory.GetShape(ShapeType.Rectangle);
sh3.draw();
Console.Read();
}
}
/// <summary>
/// 形状 接口
/// </summary>
public interface shape
{
void draw();
}
/// <summary>
/// 矩形
/// </summary>
public class Rectangle : shape
{
public void draw()
{
Console.WriteLine("矩形实现形状的接口方法draw()。");
}
}
/// <summary>
/// 正方形
/// </summary>
public class Square : shape
{
public void draw()
{
Console.WriteLine("正方形实现形状的接口方法draw()。");
}
}/// <summary>
/// 圆形
/// </summary>
public class Circle : shape
{
public void draw()
{
Console.WriteLine("圆形实现形状的接口方法draw()。");
}
}
/// <summary>
/// 枚举 形状类型
/// </summary>
public enum ShapeType
{
Rectangle,
Square,
Circle
}
/// <summary>
/// 形状工厂
/// </summary>
public class ShapeFactory
{
/// <summary>
/// 通过参数决定创建的形状类型
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static shape GetShape(ShapeType type)
{
switch (type)
{
case ShapeType.Rectangle:
return new Rectangle();
case ShapeType.Square:
return new Square();
case ShapeType.Circle:
return new Circle();
default:
return new Square();
}
}
}
}
结果:
特点:工厂方法模式中,具体的工厂只是生产具体的某一个产品。而抽象工厂模式的具体的工厂可以生产族产品(例如奔驰轿车、奔驰SUV、奔驰MPV)。
区别:抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一种产品的继承结构,而抽象工厂模式需要面对多个产品的继承结构。