模拟Unity容器实例化AndroidPhone

一、条件
1、容器--工厂
2、集合
3、反射
4、特性--相当于配置

二、思路

1、注册类型:把类型完整名称作为key添加到数据字典中,类型添加到数据字典的value中

2、获取实例:根据完整类型名称也就是key取出value,用反射创建类型的实例

三、代码实现

1、IPhone接口

namespace SimplestUnity
{
interface IPhone
{
void Call();
}
}

2、AndroidPhone实现

namespace SimplestUnity
{
public class AndroidPhone:IPhone
{
public AndroidPhone()
{
Console.WriteLine("{0}构造函数", this.GetType().Name);
} public void Call()
{
Console.WriteLine("{0}打电话", this.GetType().Name);
}
}
}

3、容器--接口

namespace SimplestUnity
{
public interface IDaivdContainer
{
void RegisterType<TFrom, TTo>(); T Resolve<T>();
}
}

4、容器--实现

namespace SimplestUnity
{
public class DaivdContainer:IDaivdContainer
{
private Dictionary<string, Type> containerDictionary = new Dictionary<string, Type>();//字典 public void RegisterType<TFrom, TTo>()
{
containerDictionary.Add(typeof(TFrom).FullName, typeof(TTo));
} public T Resolve<T>()
{
Type type = containerDictionary[typeof(T).FullName];
return (T)Activator.CreateInstance(type);
}
}
}

5、客户端调用

class Program
{
static void Main(string[] args)
{
DaivdContainer davidContainer = new DaivdContainer();
davidContainer.RegisterType<IPhone, AndroidPhone>();
IPhone iphone = davidContainer.Resolve<IPhone>();
iphone.Call();
}
}

6、运行效果

最新文章

  1. const 和 readonly
  2. php中or的含义
  3. 边工作边刷题:70天一遍leetcode: day 86-2
  4. C# Winform 拖放操作
  5. Requirements of children
  6. mysql中的timestamp类型时间比较:unix_timestamp函数
  7. Spring Boot 入门
  8. iOS根据2个经纬度计算距离
  9. uva11922(强行用rope替代spaly)
  10. java流的性能优化1-文件复制
  11. haxe 嵌入swf 读取里面的内容
  12. VS 2017 Git failed with a fatal error的解决办法
  13. 第3阶段——内核启动分析之make menuconfig内核配置(2)
  14. JavaEE error整理(不断更新)
  15. Python就业指导
  16. (最简单)红米手机5A的USB调试模式在哪里开启的方法
  17. Linux中对逻辑卷的移除
  18. oracle 游标/函数/存储过程/触发器 表空间
  19. PAT 乙级 1066. 图像过滤(15)
  20. android 系统层 常用类介绍

热门文章

  1. C#学习笔记04--排序/查找/二维数组/交叉数组
  2. 应该如何刷 LeetCode?
  3. CCNA 之 八 交换基础 VLAN TRUNK VTP
  4. CCNA 之 十 ACL 访问控制列表
  5. OSI-传输层
  6. 正则grep 使用介绍
  7. java 实现文件读写操作
  8. 网络ASI
  9. 华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破【华为云技术分享】
  10. 【django后端分离】rbac组件(文件源代码+使用)