zoukankan      html  css  js  c++  java
  • 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的高内聚的责任分配原则
  • 相关阅读:
    putty相关知识整理
    CSS 必知的7个知识点
    Jquery学习资料链接
    转:Google Chrome浏览调试工具
    CGI小白一些漫想
    css hack
    sublime 使用技巧总结
    转:20个将js推到极致的网站
    转:haslayout:必须要理解的IE渲染概念
    正则表达式学习 (简约版)
  • 原文地址:https://www.cnblogs.com/25miao/p/10389011.html
Copyright © 2011-2022 走看看