工厂设计模式解决的问题是简单工厂设计模式中对类进行修改的时候就要修改原来的工厂类,那么久违背了开放封闭原则。
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类中。这就意味着在客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的。
参考代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 通过一系列工厂将要生成的对象放入特定的工厂
/// 将类的实例化过程延迟到了工厂子类完成
/// </summary>
namespace 工厂设计模式
{
public abstract class Student
{
public abstract void Learn();
}
class UnityStudent : Student
{
public override void Learn()
{
Console.WriteLine("我要做Unity开发工程师");
}
}
class H5Student : Student
{
public override void Learn()
{
Console.WriteLine("我要做H5开发工程师");
}
}
interface IFactory
{
Student GenerateStudent();
}
class QKUnityFactory : IFactory
{
public Student GenerateStudent()
{
return new UnityStudent();
}
}
class QKH5Factory : IFactory
{
public Student GenerateStudent()
{
return new H5Student();
}
}
class Program
{
static void Main(string[] args)
{
IFactory unityStudentFactory = new QKUnityFactory();
Student unityStudent = unityStudentFactory.GenerateStudent();
unityStudent.Learn();
IFactory h5StudentFactory = new QKH5Factory();
Student h5Student = h5StudentFactory.GenerateStudent();
h5Student.Learn();
}
}
}