zoukankan      html  css  js  c++  java
  • 抽象工厂模式实例(C#)

    抽象工厂的具体实例:

     

    用Factory Method模式设计一个电视机工厂:

    要求为每种品牌的电视机提供一个子工厂,如:海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电视机,如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。

    类图:


    说明:此类图由Visual studio 2012根据源码自动生成,Program可视为调用工厂的Client

    由类图可见我单独为电视产品申明了一个顶层的抽象类,之后是海尔和海信各自的产品抽象类,然后具体的产品类由各自的产商自己实现。同时产品的工厂类也是由一个顶层的抽象工厂类,下面派生了两个具体的海尔工厂类和海信工厂类。

    Factory类实现源码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace AbstractTVFactory
    {
        //抽象的TV
        abstract class AbsTVFactory
        {
            //private String Brand;
            abstract public AbsTVProduct BuildProduct();
        }
    
        //具体的电视品牌的抽象工厂
        class HairFactory : AbsTVFactory
        {
            //public void getBrand()
            //{
            //    //throw new NotImplementedException();
            //    Console.WriteLine("Hair Brand");
            //}
            public override AbsTVProduct BuildProduct()
            {
                //throw new NotImplementedException();
                return new HairTV1();
            }
        }
    
        class HisenseFactory : AbsTVFactory
        {
            public override AbsTVProduct BuildProduct()
            {
                return new HisenseTV1();
            }
        }
        abstract class AbsTVProduct
        {
            abstract public void TVProduct();
        }
    
        //下面是抽象的产品TV类
        abstract class AbsHairTVProduct:AbsTVProduct      //海尔的产品抽象类
        {
            abstract override public void TVProduct();
        }
        abstract class AbsHisenseTVProduct : AbsTVProduct   //海信的产品抽象类
        {
            abstract override public void TVProduct();
        }
    
        //具体的TV类
        class HairTV1 : AbsHairTVProduct    //海尔的TV产品1
        {
            public override void TVProduct()
            {
                Console.WriteLine("This is Hair TV Product! " + this.GetType().ToString());
            }
        }
        class HairTV2 : AbsHairTVProduct      //海尔的TV产品2
        {
            public override void TVProduct()
            {
                Console.WriteLine("This is Hair TV Product! "+this.GetType().ToString());
            }
        }
    
        class HisenseTV1 : AbsHisenseTVProduct
        {
            public override void TVProduct()
            {
                //throw new NotImplementedException();
                Console.WriteLine("This is Hisense TV Product! " + this.GetType().ToString());
            }
        }
        class HisenseTV2 : AbsHisenseTVProduct
        {
            public override void TVProduct()
            {
                //throw new NotImplementedException();
                Console.WriteLine("This is Hisense TV Product! " + this.GetType().ToString());
            }
        }
    
    }
    
    客户端运行源码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace AbstractTVFactory
    {
        class Program
        {
            static void Main(string[] args)
            {
                AbsTVFactory HairTVFactory = new HairFactory();
                AbsHairTVProduct HairTV_1=new HairTV1();                  //海尔TV种类1
                HairTV_1=(AbsHairTVProduct)HairTVFactory.BuildProduct();
                HairTV_1.TVProduct();
    
                AbsHairTVProduct HairTV_2 = new HairTV2();                //海尔的TV种类2
                HairTV_2 = (AbsHairTVProduct)HairTVFactory.BuildProduct();
                HairTV_2.TVProduct();
    
                //海信的TV
                AbsTVFactory HisenseTVFactory = new HisenseFactory();
                AbsHisenseTVProduct HisenseTV_1 = new HisenseTV1();        //海信的TV种类1
                HisenseTV_1 = (AbsHisenseTVProduct)HisenseTVFactory.BuildProduct();
                HisenseTV_1.TVProduct();
    
                AbsHisenseTVProduct HisenseTV_2 = new HisenseTV2();        //海信的TV种类2
                HisenseTV_2 = (AbsHisenseTVProduct)HisenseTVFactory.BuildProduct();
                HisenseTV_2.TVProduct();
    
                Console.ReadKey();
            }
        }
    }
    

    运行截图:


    直观的关系图:



  • 相关阅读:
    NER(HMM实现)
    embedding(keras,word2vec)
    Word2Vec
    nlp文本转化方式小结
    文本向量化(欧氏距离,哈夫曼距离,L1,L2,TF-IDF)
    文件读取与保存(nlp,json)
    python调用大漠插件教程05字库
    Linux重定向与管道
    Linux文件句柄数调整
    HDFS命令实现分析
  • 原文地址:https://www.cnblogs.com/NewWork/p/3260559.html
Copyright © 2011-2022 走看看