面向对象编程思想-简单工厂模式
一、引言
简单工厂、工厂方法、抽象工厂模式都属于设计模式中的创建型设计模式,它们帮助我们把对象的实例化部分抽取出来,进而优化系统架构,提高系统的扩展性。本文介绍一个比较容易理解的模式-简单工厂模式。
二、简单工厂模式
定义:“工厂”?!看到这个词语,在现实生活中大家会想到是生产产品的,同样,在简单工厂模式里大家可以理解为工厂其实就是创建对象的一个类。平时我们编程的时候,当使用“new”创建对象时,此类就增加了对该对象的依赖,它们之间的耦合度就增加了,这样当业务需求变化时,我们就不得不去修改此类的源码。在程序设计中,我们可以用“封装改变”的原则,把对象的创建部分抽取出来,去解决此类对该对象的依赖问题。这就用到“简单工厂模式”。下面通过一个例子,帮助理解简单工厂模式
在现实生活中,我们都会开着车去上班,比如周一开奔驰去上班,周二想开宝马去上班,可是我们车库里没有宝马怎么办???这时,其实办法还是有的,我们可以通过滴滴打车,叫一辆专车宝马载着我们去上班,这样我们就解决了我们没有宝马的问题,直接消费产品就可以了,不需要关注买车的问题。
下面是代码demo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DNA.Framework.SimpleFactory {
//奔驰类 class MBZ : BaseCar { public override void Run() { Console.WriteLine("我今天开{0}去上班", this.GetType().Name); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DNA.Framework.SimpleFactory {
//宝马类 class BMW : BaseCar { public override void Run() { Console.WriteLine("我今天开{0}去上班", this.GetType().Name); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DNA.Framework.SimpleFactory {
//车子抽象类 public abstract class BaseCar {
//我今天开什么类型的车去上班 public abstract void Run(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DNA.Framework.SimpleFactory {
//简单工厂类 负责提供车,即车工厂相当于滴滴打车的平台,传入类型相当于你叫的什么类型的车 class CarFactory { public static BaseCar GetCar(CarType cartype) { BaseCar car = null; switch (cartype) { case CarType.MBZ: car = new MBZ(); break; case CarType.BMW: car = new BMW(); break; default: throw new Exception(string.Format("暂时不提供{0}", cartype)); } return car; } public enum CarType { MBZ, BMW } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DNA.Framework.SimpleFactory {
//我们相当于客户端,负责调用简单工厂生产对象 class Program { static void Main(string[] args) { BaseCar bmw = CarFactory.GetCar(CarFactory.CarType.BMW); BaseCar mbz = CarFactory.GetCar(CarFactory.CarType.MBZ); bmw.Run(); mbz.Run(); Console.Read(); } } }
优点:比起平时的直接“new”生产对象
1.简单工厂解决了客户端与对象的直接依赖,消除客户端直接创建对象责任,实现客户端只需要关注消费产品就可以了,实现责任的分割。
2.代码复用性增高,这样不仅我打车时不需要关注车库中有没有想坐的车,其他人一样也可以直接消费产品就可以了,把创建车的事情交给了滴滴打车。
缺点:
1.工厂类集中了所有产品的创建,职责过重,工厂类如果不能运行了,整个系统都会受到影响。
2.不利于代码扩展,一旦增加新的消费产品,就需要修改工厂类,工厂类会越来越复杂。
适用场景:工厂类创建对象较少时;客户知道传入工厂参数,不需要关注对象创建逻辑时。
关于简单工厂模式的学习就到此结束了,哇,已经这么晚了,写博客真的很重要,这个可能只有做了得人才知道,需要锻炼一个人的语言组织能力,执行力,对知识的掌握扎实度的考验等等。本文是笔者对知识的巩固,当然也希望能帮到他人,若有不足地方,欢迎斧正,感谢您的阅读。
参考:http://www.cnblogs.com/zhili/p/SimpleFactory.html