zoukankan      html  css  js  c++  java
  • 面向对象编程思想-简单工厂模式

    一、引言

    简单工厂、工厂方法、抽象工厂模式都属于设计模式中的创建型设计模式,它们帮助我们把对象的实例化部分抽取出来,进而优化系统架构,提高系统的扩展性。本文介绍一个比较容易理解的模式-简单工厂模式。

    二、简单工厂模式

    定义:“工厂”?!看到这个词语,在现实生活中大家会想到是生产产品的,同样,在简单工厂模式里大家可以理解为工厂其实就是创建对象的一个类。平时我们编程的时候,当使用“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

  • 相关阅读:
    链表的相关操作
    【回溯】旅行商问题
    【回溯】图的m着色问题
    奶牛卧室_待解决
    阶乘问题
    子数整数
    hihoCoder week4 Trie图
    hihoCoder week3 KMP算法
    hihoCoder week2 Trie树
    hihoCoder week1 最长回文子串
  • 原文地址:https://www.cnblogs.com/jdzhang/p/6926921.html
Copyright © 2011-2022 走看看