• 简单工厂模式


    简单工厂模式概念:

          简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    简单工厂类图:

     

    简单工厂类(creater):是工厂模式的核心,负责创建所有类的内部逻辑。需供外界调用,所以一般为静态方法。返回抽象父类。

    抽象产品(Product):是所有类抽象出来的父类。可以是接口,也可以是抽象类。

    具体产品(Concrete Product):角色,简单工厂中的实例对象。工厂类中需返回的对象。

    简单工厂模式深入分析

           简单工厂模式解决的问题是如何去实例化一个合适的对象。

           简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。

           具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。

           如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑或,我们就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。

    简单工厂实例:

         用户给出一个文件名,需要根据文件名的后缀名判断它是什么文件,要用什么软件打开。

         比如如果用户给出的文件名是“我的资料.txt”,那么工厂类就需返回一个文本类对象,然后输出“我的资料.txt”是文本文件,后缀名是“.txt”,需要用记事本打开。

     根据需求 我们需要创建一个父类OpenFile.cs

     1 class OpenFile
     2 {
     3 private string cmd;
     4 public string Cmd{
     5 get{
     6  return cmd;
     7 } 
     8 }
     9 public OpenFile(string cmd){
    10 this.cmd=cmd;
    11 }
    12 public virtual viod Open(){
    13 Console.WirteLine("无法识别文件!");
    14 }
    15 }

    添加两个文件类继承于类OpenFile:

    Text.cs

    class Text{
    public Text(string cmd):base(cmd){}
    public override void Open(){
    string FileName = Path.GetFileNameWithoutExtension(Cmd);
    string FileExtension = Path.GetExtension(Cmd);
    Console.WirteLine("{0}是文本文件,后缀名是{1},需用记事本打开!");
    }
    }

    Excel.cs

    class Excel{
    public Excel(string cmd):base(cmd){}
    public override void Open(){
    string FileName = Path.GetFileNameWithoutExtension(Cmd);
                string FileExtension = Path.GetExtension(Cmd);
    Console.WriteLine("{0}是表格文件,后缀名是{1},需用Excel打开!");
    }
    }

    然后创建工厂类来创建实例对象:

    Factory.cs

    class Factory{
    public static OpenFile GetObj(string cmd){
    
                string FileExtension = Path.GetExtension(Cmd);
    switch(FileExtension){
    case ".txt": return new Text(cmd);
    case ".xls": return ne Excel(cmd);
    default : return new OpenFile(cmd);
    }
    }
    }

    main函数中代码:

    Console.WriteLine("请输入你要打开的文件名。")
    string cmd=Console.ReadLine(); 
    OpenFile o= Factory.GetObj(cmd);
    o.Open();
    Console.ReadKey();
  • 相关阅读:
    Tcpdump抓包
    关于Adroid Bitmap OutOfMemoryError的问题解决
    java用substring函数截取string中一段字符串
    偶耶DIY布偶成都实体店开业
    瑞士Kardex(卡迪斯)自动化仓储货柜,Shuttle XP系列升降库驱动监控系统
    360顽固木马专杀工具 千万别用 会删除Oracle服务
    天上人和酒店管理系统(.net3.5 + sql2000 + linq to sql)
    [转]VC++中CListCtrl listcontrol用法技巧
    [转]孙鑫教程学习笔记
    [转]VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
  • 原文地址:https://www.cnblogs.com/tanzhen/p/4221885.html
Copyright © 2020-2023  润新知