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

    简单工厂模式概念:

          简单工厂模式(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();
  • 相关阅读:
    手机分辨率对应表
    本地加密解密工具类
    缓存清理的工具类
    Javadoc常见的标记和含义
    Android 禁止进入activity自动弹出键盘
    ListView
    可以展开和收起的的LinearLayout
    Android 编码规范
    ToastUtils
    防微信左滑删除的效果
  • 原文地址:https://www.cnblogs.com/tanzhen/p/4221885.html
Copyright © 2011-2022 走看看