• 工厂模式以及反射机制


    Public interface IFruit{
    }

    接下来我们为抽象的水果(接口)提供具体的水果类:

    public class Orange:IFruit{
    public Orange(){
    Console.WriteLine(
    "An orange is got!");
    }
    }

    public class Apple:IFruit{
    public Apple(){
    Console.WriteLine(
    "An apple is got!"); 
    }
    }


    最后我们再创建一个水果工厂:

    public class FruitFactory{
    public IFruit MakeFruit(string Name){
    switch (Name){
    case "Orange":
    return new Orange();
    case "Apple":
    return new Apple();
    default:
    return null;
    }
    }
    }


    在水果工厂(FruitFactory)中,只要输入一个水果名称(Name),就会返回一个相应的水果对象:

    string FruitName = Console.ReadLine();
    IFruit MyFruit;
    FruitFactory MyFruitFactory 
    = new FruitFactory();
    MyFruit 
    = MyFruitFactory.MakeFruit(FruitName);

    以上水果工厂(FruitFactory)的工作原理就是,根据输入的水果名称,经过条件判断(switch),返回相应的水果对象。

    如果水果工厂(FruitFactory)只要知道水果的名称(Name),而无须经过条件判断(switch),就能返回相应的水果对象,那就好了。

    在C#中提供了相应的机制,那就是反射。

    在反射机制中一个重要的类就是System.Type类,我们可以使用 Type 对象的方法、字段、属性和嵌套类来查找类的所有信息。

    另外一个重要的类就是System.Activator,它包含特定的方法,可以在本地创建对象或创建现有远程对象的引用。

    我们可以先利用Type类获取Name指定的类名的类的Type信息,然后可以根据这个信息利用Activator创建对象。

    public class FruitFactory{
    public IFruit MakeFruit(string Name){
    IFruit MyFruit 
    = null;
    try{
    Type type 
    = Type.GetType(Name,true);
    MyFruit 
    = (IFruit)Activator.CreateInstance(type);
    }
    catch (TypeLoadException e)
    Console.WriteLine(
    "I dont know this kind of fruit,exception caught - {0}" ,e.Message);
    return MyFruit;
    }
    }
  • 相关阅读:
    Flink 窗口API & 窗口分配器
    selenium 远程浏览器selenoid服务搭建
    钉钉设置极速打卡
    iphone不设置密码钉钉自动打卡
    C++对象间通信组件,让C++对象“无障碍交流”
    Ubuntu20 安装最新cmake,以及NO_PUBKEY问题踩坑
    蜻蜓低代码安全工具平台开发之路
    后缀数组
    后缀数组SA 回文自动机PAM
    git 系列
  • 原文地址:https://www.cnblogs.com/kkkblog/p/3530812.html
Copyright © 2020-2023  润新知