• c# 设计模式 之:工厂模式之---简单工厂


    1、uml类图如下:

    具体实现和依赖关系:

    实现:SportCar、JeepCar、HatchbackCar 实现 Icar接口

    依赖:

            Factory依赖 SportCar、JeepCar、HatchbackCar

            Client依赖:Icar接口和Factory类

    2、具体实现:

    抽象产品类代码:

    namespace CNBlogs.DesignPattern.Common
    {
        /// <summary>
        /// 抽象产品类: 汽车
        /// </summary>
        public interface ICar
        {
            void GetCar();
        }
    }

    具体产品类代码:

    namespace CNBlogs.DesignPattern.Common
    {
        public enum CarType
        {
            SportCarType = 0,
            JeepCarType = 1,
            HatchbackCarType = 2
        }
    
        /// <summary>
        /// 具体产品类: 跑车
        /// </summary>
        public class SportCar : ICar
        {
            public void GetCar()
            {
                Console.WriteLine("场务把跑车交给范·迪塞尔");
            }
        }
    
        /// <summary>
        /// 具体产品类: 越野车
        /// </summary>
        public class JeepCar : ICar
        {
            public void GetCar()
            {
                Console.WriteLine("场务把越野车交给范·迪塞尔");
            }
        }
    
        /// <summary>
        /// 具体产品类: 两箱车
        /// </summary>
        public class HatchbackCar : ICar
        {
            public void GetCar()
            {
                Console.WriteLine("场务把两箱车交给范·迪塞尔");
            }
        }
    }

    简单工厂核心代码:

    namespace CNBlogs.DesignPattern.Common
    {
        public class Factory
        {
            public ICar GetCar(CarType carType)
            {
                switch (carType)
                {
                    case CarType.SportCarType:
                        return new SportCar();
                    case CarType.JeepCarType:
                        return new JeepCar();
                    case CarType.HatchbackCarType:
                        return new HatchbackCar();
                    default:
                        throw new Exception("爱上一匹野马,可我的家里没有草原. 你走吧!");
                }
            }
        }
    }

    客户端调用代码:

    //------------------------------------------------------------------------------
    // <copyright file="Program.cs" company="CNBlogs Corporation">
    //     Copyright (C) 2015-2016 All Rights Reserved
    //     原博文地址: http://www.cnblogs.com/toutou/
    //     作      者: 请叫我头头哥
    // </copyright> 
    //------------------------------------------------------------------------------
    namespace CNBlogs.DesignPattern
    {
        using System;
        using CNBlogs.DesignPattern.Common;
    
        class Program
        {
            static void Main(string[] args)
            {
                ICar car;
                try
                {
                    Factory factory = new Factory();
    
                    Console.WriteLine("范·迪塞尔下一场戏开跑车。");
                    car = factory.GetCar(CarType.SportCarType);
                    car.GetCar();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
    • 优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
    • 缺点:很明显工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则
  • 相关阅读:
    Python基础知识(八)—字典
    Python基础知识(七)—元组
    Python基础知识(六)—关于列表深拷贝和浅拷贝及内存图
    Python基础知识(六)—列表
    Python基础知识(五)—字符串
    4、FTP、SSH协议简单介绍
    3、apt-get install xxx时,报错信信息: Could not get lock /var/lib/dpkg/lock-frontend
    2、NFS挂载根文件系统失败:Root-NFS: Unable to get mountd port number from server, using default
    EXPORT_SYMBOL是什么?
    用maven建立一个工程2
  • 原文地址:https://www.cnblogs.com/25miao/p/10389011.html
Copyright © 2020-2023  润新知