数据容器就是装载各种容器的数据结构,比较实用的两种:数组和容器。
两大特点:
散列表本质上就是一个由链表组成的数组。通过散列算法,使它同时具备散列表和数组的优点:既能像链表那样高速地增加和删除元素,也几乎能和数组一样快速定位元素。
散列表像银行的保险柜,每一个柜子对应一把唯一的钥匙,虽然柜子集中存放,但相互隔离,彼此保密。
实例背景:一个工程越写越大,越来越多的service这种中间层的类需要单例模式。这样会有以下两个问题:
分析:需要一个统一的方法来管理这些类。可以用Container。
Container的核心是散列表。首先,Container可以用字典实现:
Dictionary<string,object> container = Dictionary<string,object>();
之后,在字典里添加所有的单例,它的key值是string类型,代表要实现的单例的类名。
container.Add("ConfigService",new ConfigService());
为了方便管理,我们把所有的key综合到某个class里或者枚举类型里。
class ServiceKeys{ public static readonly string ConfigService = "ConfigService "; public static readonly string DatabaseService = "DatabaseService "; }
然后取对象
ConfigService configService = container[ServiceKeys.ConfigServices]; //别忘了的添加语句也替换 Container.Add(ServiceKeys.ConfigService , new ConfigService());
保证单例,我们只需要把container自己定义为单例就可以了。一旦container变成了单例,那么它的子元素自然是唯一的。
但新的问题出现了:非单例的service怎么办?因为有的service不需要单例;我想所有的对象都从统一的接口取。
~~~~~~~
这样做的好处:
Container和工厂模式类比,区别如下:
字面意思:“某种权利交给了别人,于是被反转了”。
实现的两种方式:
原文:https://www.cnblogs.com/juanzhi/p/12364484.html