入坑设计模式~工厂方法模式(Factory)
前言;工厂方法模式又叫做工厂模式,它是23个设计模式中的一个,它解决的还是在软件设计中创建对象的问题,它可以更好的解决用户需求的变化.
问题;在简单工厂模式中,我们将实例化的对象全部放于Factory.cs(工厂类),在我们的预知下我们可以实例化对象,但是我们的预知是有限的,而客户的需求是无限的,这样就出现了问题,一但客户的需求过于复杂,我们就要修改源码了,这是设计模式不允许的.
定义:在工厂模式中,父类负责定义创建对象的接口,子类负责new具体对象。
现实中的例子:我们举一个例子,这个例子和简单工厂的例子有些不同。
据说清朝有个皇帝,它非常奢侈,每个衣服都有一个宫女负责,这样一来,每增加一种衣服,就得多出一个宫女,但她们各付其职,互不影响。
分析:实现的功能,可以根据皇帝的需求,创建宫女去拿所对应的衣服,如果皇帝太奢侈,这种衣服还没有,只需要添加一个宫女就可以满足他的需求了,每个宫女只要有一种衣服即可(高内聚),要增加衣服,对于原来宫女和衣服来说,谁都不影响谁。
商品系列
商品接口ICoat.cs
public interface ICoat { void ShowCoat();
}
具体商品:商务上衣
public class BusinessCoat : ICoat { public void ShowCoat() { Console.Write("这件是商务上衣"); //throw new NotImplementedException(); } }
具体商品:时尚上衣
public class BusinessFactory : IFactory { public ICoat CreateCoat() { return new BusinessCoat(); ///throw new NotImplementedException(); } }
下面是工厂系列
总厂房:
public interface IFactory { ICoat CreateCoat(); }
时尚上衣工厂
public class FashionFactory : IFactory { public ICoat CreateCoat() { return new FashionCoat(); } }
商务上衣工厂
public class BusinessFactory : IFactory { public ICoat CreateCoat() { return new BusinessCoat(); ///throw new NotImplementedException(); } }
皇帝:
static void Main(string[] args) { BusinessCoat coat = new BusinessCoat(); coat.ShowCoat(); Console.ReadLine(); }