请问这在UML类关系图里是什么关系,可以用依赖来表示吗?但是总是感觉怪怪的,请高手解答

霜叶红似二月花 2008-11-23 12:51:23
public static class CacheFactory
{
private static CacheManagerFactory factory = new CacheManagerFactory(ConfigurationSourceFactory.Create());
private static object lockObject = new object();
public static ICacheManager GetCacheManager()
{
try
{
lock (lockObject)
{
return factory.CreateDefault();
}
}
catch (ConfigurationErrorsException configurationException)
{
TryLogConfigurationError(configurationException, "default");
}
}
}

public class Test
{
public ICacheMange cacheManage;
private CacheFactory factory;
public void GetCacheMange()
{
cacheMange=factory.GetCacheManager();
}
}
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dz_huanbao 2008-12-01
  • 打赏
  • 举报
回复
请访问我的blog,里面对UML有比较详尽的介绍。当然,网上也有很多这方面的资料。
http://blog.csdn.net/dz_huanbao
  • 打赏
  • 举报
回复
上边的代码是enterprise library 中的代码片断,应为enterprise library的文档都是英文的,我想用UML把他的关系画出来好理清思路。后面的test类是我自己临时仿照这个问题的需要加的调用类。可能是我的uml功夫不是很到位,呵呵,所以提出了这个问题。关键是enterprise libray 的源代码理解起来还是比较晦涩一点,努力中。呵呵
qinhl99 2008-11-23
  • 打赏
  • 举报
回复
关联关系
wuyq11 2008-11-23
  • 打赏
  • 举报
回复
类图,关联关系
  • 打赏
  • 举报
回复
内家拳主张把花拳绣腿的各种模式编程意识、自然反应,它强调与主张虚张声势震筋断脉的外家拳不同的训练方法。而OOAD就像是内家拳,我很少在OOAD的文献中看到死抠模式、OOPL的描述,一切看起来都很简单直观。
  • 打赏
  • 举报
回复
至于说想把本来唾手可得的 GetCacheManager 方法 :

MyCacheManager mc= GetCacheManager();
....... //使用mc。

再玩一次心跳地从一个动态创建的对象中取得:

FactoryInterface a=GetFactory();
MyCacheManager mc= a.GetCacheManager();
....... //使用mc。

这也只是迭代了一次上面的游戏。
  • 打赏
  • 举报
回复
这是一个简单的按照接口进行设计和编程的结果,不过(模式)它把实际的过程给你倒过来了,不自然,甚至起了一个“工厂”这么雷人的名字。

如果你在应用程序中写:

MyCacheManager mc= new MyCacheManager();
....... //使用mc。

这一定是非常清晰高效,而且如果有设计问题大多数在编译时就能立刻检查出来。这是最基本的编程手段。当然,代码依赖于自己。

有时候,你可能想玩多态了,也就是说右边不一定是MyCacheManager类型的实例,而是其子类,我们可以写:

MyCacheManager mc= new ExtCacheManager();
....... //使用mc。

此时,这段代码依赖于ExtCacheManager。

但是你可能想把创建实例的方法放在另一个地方,使得剩下的代码仍然仅仅依赖于MyCacheManager 自己。你可以写:

MyCacheManager mc= GetCacheManager();
....... //使用mc。

不过这只是把对ExtCacheManager推迟(转移到)GetCacheManager方法中去。

如果要“不依赖”与具体的ExtCacheManager或者类似的类型,可以将这种依赖推迟到“配置系统”中去决定,你可以使用在 GetCacheManager 方法中读取系统配置信息(利用System.Configuration.ConfigurationManager)然后反射来得到实际的类型,并实例化返回对象。

当然,当你使用一个“创建方法”来推迟MyCacheManager 具体实例的创建时,MyCacheManager 就可以是一个虚类型或者个接口。




上面,玩的就是“摆脱依赖”的心跳游戏,如果你一味去盯着“依赖”,那么从第一条语句实际应用语句“MyCacheManager mc= GetCacheManager();”开始就跟写这个代码的初衷背道而驰了。



而当你看到“工厂”这个概念的时候,有可能它只是教你死记硬背,是与这个自然的顺序相反地,你就不知道为什么要那样。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧