简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
引入:
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了其子类
简单的来说,工厂模式实现的时候,客户端需要决定实例化哪一个工厂来实现抽象接口类,即工厂方法是把简单工厂的内部逻辑判断移到了客户端代码进行。想要加功能,本来是修改抽象工厂类,显示是修改客户端。
工厂方法克服了简答工厂违背开放-封闭原则的缺点,又保持了封闭对象创建过程的优点
class Program
{
class Coder
{
public void Code()
{
Console.WriteLine("Coding");
}
public void Play()
{
Console.WriteLine("Playing");
}
}
class zyj : Coder
{ }
class wjj : Coder
{ }
interface IFactory
{
Coder CreateCoder();
}
class zyjs:IFactory
{
public Coder CreateCoder()
{
return new zyj();
}
}
class wjjs:IFactory
{
public Coder CreateCoder()
{
return new wjj();
}
}
static void Main(string[] args)//client
{
IFactory factory = new zyjs();
Coder MissZhou = factory.CreateCoder();
MissZhou.Code();
MissZhou.Play();
Console.Read();
}
另:开放封闭原则
1. 它们 "面向扩展开放(Open For Extension)"。
也就是说模块的行为是能够被扩展的。当应用程序的需求变化时,我们可以使模块表现出全新的或与以往不同的行为,以满足新的需求。
2. 它们 "面向修改封闭(Closed For Modification)"。
模块的源代码是不能被侵犯的,任何人都不允许修改已有源代码。