zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式的目的主要是用来创建对象。工厂是对对象创建过程的封装,不需要使用者自己去创建对象了,工厂模式可以通过现实中的工厂来理解,比如我要一部车,你可以自己做(但是你不怎么想),也可以交给工厂给你做。工厂可以把这个事情做好,然后给你想要的车,前提是你要告诉工厂具体的产品名称,必要的参数等等。

    如汽车厂(CarFactory)可以生产汽车(Car),包括就有宝马、奔驰、大众等等;通过对这些车抽象至都是“车”(Car)这个抽象的模型,这个汽车工厂当然可以制作很多种类,具体多少种得看当前这个车概念下有多少种车了(继承“车”这个模型的类的种类),当然也不一定全要生产(看具体这个工厂提供哪些了,CarFactory中能实例化多少种类)。

    当我们想要一辆宝马,我们告诉工厂给我一辆宝马车,然后工厂会调用宝马车制造流水线制造它并提供给你,加入你说给我一辆自行车,不好意思,我们不生产(其实是自行车没有继承Car罢了)。具体代码如下所示(C#):

    /*
    *---------------------------------
    *| All rights reserved.
    *| author: lizhanping
    *| version:1.0
    *| File: SimpleFactory.cs
    *| Summary:
    *| Date: 2019/3/8 15:29:44
    *---------------------------------
    */
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace DesignPatternTest
    {
    /// <summary>
    /// 抽象的车
    /// </summary>
    public abstract class Car
    {
    /// <summary>
    /// 车都有run这个功能(方法)
    /// </summary>
    public abstract void Run();
    }

    /// <summary>
    /// 奔驰车
    /// </summary>
    public class BenzCar : Car
    {
    public override void Run()
    {
    Console.WriteLine("Benz is running...");
    }
    }
    /// <summary>
    /// 宝马车
    /// </summary>
    public class BmwCar : Car
    {
    public override void Run()
    {
    Console.WriteLine("Bwm is running...");

    }
    }
    /// <summary>
    /// 制造车的工厂
    /// </summary>
    public class CarFactory
    {
    /// <summary>
    /// 制造车的方法
    /// </summary>
    /// <param name="carName">告诉我你要什么车</param>
    /// <returns></returns>
    public static Car CreateMyCar(string carName)
    {
    if (carName == null)
    return null;
    if (carName.Equals("Benz"))
    return new BenzCar();
    if (carName.Equals("Bmw"))
    return new BmwCar();
    return null;
    }
    }
    }

    然后测试代码,新建控制台项目,在Program.cs文件中:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace DesignPatternTest
    {
    class Program
    {
    static void Main(string[] args)
    {
    Car myCar = CarFactory.CreateMyCar("Benz");
    myCar.Run();
    Console.ReadKey();
    }
    }
    }

    输出结果:

  • 相关阅读:
    Fish
    Brackets
    StoneWall【★★★★★】
    Nesting
    ajax补充FormData
    初始Ajax
    extra过滤
    Django 之缓存
    django中的信号
    Form组件归类
  • 原文地址:https://www.cnblogs.com/chyshx/p/10496365.html
Copyright © 2011-2022 走看看