当前位置:编程学习 > C#/ASP.NET >>

问题很难,估计MVP级别的才能解决,小菜鸟就别进来了

单例模式怎么实现接口与实现分离?

例如有一个全局对象需要做成单例模式,这个对象是在A模块中定义和实现,现在需要在B模块中实例化, 而B模块又不会直接引用A模块, 应该怎么做呢?

两个模块之间可以有一个公共接口层,但B模块绝对是不知道A对这个单例对象的具体实现的! --------------------编程问答-------------------- 露个小脸,发现要MVP,赶紧溜 --------------------编程问答--------------------
引用 1 楼 hdt 的回复:
露个小脸,发现要MVP,赶紧溜


--------------------编程问答-------------------- 鄙人掩面滚过 --------------------编程问答-------------------- 在线等 --------------------编程问答-------------------- 单件模式是全局可访问的,他在整个程序中就唯一一个实例。在A,B模块都可以对他进行操作啊。有什么问题呢。
获取单件对象,是使用的静态函数,A,B模块都可以调用获取,得到的是同一个实例。
--------------------编程问答--------------------
引用 5 楼 shenlanql 的回复:
单件模式是全局可访问的,他在整个程序中就唯一一个实例。在A,B模块都可以对他进行操作啊。有什么问题呢。
获取单件对象,是使用的静态函数,A,B模块都可以调用获取,得到的是同一个实例。


需要一个解耦, A实现,B消费, --------------------编程问答-------------------- 连个第三个字母都不如的泪奔。 --------------------编程问答-------------------- IoC+Abstract Factory? --------------------编程问答-------------------- 菜鸟路过学习,楼主结贴率有点第 --------------------编程问答-------------------- 题意也没有读懂的顺便飘过 --------------------编程问答--------------------
引用 10 楼 u010383116 的回复:
题意也没有读懂的顺便飘过
哪来那么多的ID? --------------------编程问答--------------------
引用 11 楼 zhuankeshumo 的回复:
Quote: 引用 10 楼 u010383116 的回复:

题意也没有读懂的顺便飘过
哪来那么多的ID?

没有办法出生的晚,csdn必须我们出生时有个统一身份证号,看起来蛮可爱,***家族 --------------------编程问答-------------------- 楼主的题目很霸气呀 --------------------编程问答--------------------
引用 楼主 android2012 的回复:
例如有一个全局对象需要做成单例模式,这个对象是在A模块中定义和实现,现在需要在B模块中实例化, 而B模块又不会直接引用A模块, 应该怎么做呢?
看不懂你这是什么意思。既然“需要在B模块中实例化”,那么就是“需要先引用,再实例化”的意思。你为什么以逻辑上的自相矛盾为乐呢?

如果不引用,那么你就要说明白应该引用什么。软件设计本来就像说大白话一样,需要“自然”才能明白。怕的就是一些书生读书过头了,连正常的普通话都不愿意说了。 --------------------编程问答-------------------- 比如说,一个程序引用了 System.Data.Common.DbProviderFactory 来进行所有操作设计,它是用一个反射来获取符合这个类型的对象实例。那么你就说“我引用 DbProviderFactory”这就对了。

假设你自己引用了DbProviderFactory,并且有上千行代码与之直接相关。而你整天唠叨说“我没有直接引用 SqlClientFactory”,“我没有直接引用OleDbFactory”,这就等于是跟你自己的程序唱对台戏。

--------------------编程问答-------------------- MVP级别的也就值20分啊,连默认值都没达到啊,唉,小菜鸟可以去死了 --------------------编程问答--------------------
4 楼 android2012 :
在线等死

             . --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 这种问题就好比你找一个建筑师去讨教,你拿出了你蹩脚的图纸,说设计就按照这个设计了,请问怎么砌砖。 --------------------编程问答--------------------
引用 15 楼 sp1234 的回复:
比如说,一个程序引用了 System.Data.Common.DbProviderFactory 来进行所有操作设计,它是用一个反射来获取符合这个类型的对象实例。那么你就说“我引用 DbProviderFactory”这就对了。

假设你自己引用了DbProviderFactory,并且有上千行代码与之直接相关。而你整天唠叨说“我没有直接引用 SqlClientFactory”,“我没有直接引用OleDbFactory”,这就等于是跟你自己的程序唱对台戏。


麻烦问一下,你知道什么是接口与实现分离吗? --------------------编程问答--------------------
引用 19 楼 caozhy 的回复:
这种问题就好比你找一个建筑师去讨教,你拿出了你蹩脚的图纸,说设计就按照这个设计了,请问怎么砌砖。


这是一个需求, 你没能力实现就别说图纸蹩脚,OK?
--------------------编程问答--------------------
引用 8 楼 zhuankeshumo 的回复:
IoC+Abstract Factory?


有点靠谱, 不知道可否详细些 --------------------编程问答-------------------- 没有哪个真正的需求会写成这样,什么单例啊,接口啊,引用啊,这些东西提需求的人完全不会关心。
你说的这些东西都是做设计的人提出来的。
这就好像,提需求的人告诉你往东走,有正规的道路你不走,非要翻山越岭去走没有路的地方,说你走偏了,还不听。 --------------------编程问答--------------------
引用 14 楼 sp1234 的回复:
Quote: 引用 楼主 android2012 的回复:

例如有一个全局对象需要做成单例模式,这个对象是在A模块中定义和实现,现在需要在B模块中实例化, 而B模块又不会直接引用A模块, 应该怎么做呢?
看不懂你这是什么意思。既然“需要在B模块中实例化”,那么就是“需要先引用,再实例化”的意思。你为什么以逻辑上的自相矛盾为乐呢?

如果不引用,那么你就要说明白应该引用什么。软件设计本来就像说大白话一样,需要“自然”才能明白。怕的就是一些书生读书过头了,连正常的普通话都不愿意说了。


很简单的需求, 比如我正设计一个客户端的框架, 业务模块以插件的形式集成到主框架中, 业务模块是独立的,但又需要访问框架的一些对象来得到一些全局的信息,如用户登录上下文, 正常当然在框架实例化业务模块的时候传入一个对象,业务模块保留这个对象的引用来访问, 但是这样编码和开发很麻烦, 我需要的是直接在业务模块中以LoginContext.Current这样的访问方式来得到当前的上下文, 而这个LoginContext又是框架实现的, 当然不可能把具体的实现暴露给业务模块, 那么我就需要这么一个设计模式来实现, 说了这么通俗了,你能理解了吧? --------------------编程问答--------------------
引用 23 楼 wddw1986 的回复:
没有哪个真正的需求会写成这样,什么单例啊,接口啊,引用啊,这些东西提需求的人完全不会关心。
你说的这些东西都是做设计的人提出来的。
这就好像,提需求的人告诉你往东走,有正规的道路你不走,非要翻山越岭去走没有路的地方,说你走偏了,还不听。

你理解不了需求就别扯一堆没用的. --------------------编程问答-------------------- 一个菜鸟在要求帮助他的人必须是MVP级别的,什么逻辑? --------------------编程问答-------------------- 看了下楼主之前帖子中的表现,先学做人吧. --------------------编程问答-------------------- 看不懂楼主想要什么
我觉得附加代码描述也许更容易明白一些 --------------------编程问答--------------------
引用 24 楼 android2012 的回复:
很简单的需求, 比如我正设计一个客户端的框架, 业务模块以插件的形式集成到主框架中, 业务模块是独立的,但又需要访问框架的一些对象来得到一些全局的信息,如用户登录上下文, 正常当然在框架实例化业务模块的时候传入一个对象,业务模块保留这个对象的引用来访问, 但是这样编码和开发很麻烦, 我需要的是直接在业务模块中以LoginContext.Current这样的访问方式来得到当前的上下文, 而这个LoginContext又是框架实现的, 当然不可能把具体的实现暴露给业务模块, 那么我就需要这么一个设计模式来实现, 说了这么通俗了,你能理解了吧?

既然是主框架,LoginContext.Current为什么 不可能暴露给业务模块。
引用是耦合,难道 配置+反射 就不耦合了?这不是自找麻烦吗? --------------------编程问答-------------------- 业务模块引用主框架,这不是很正常的是吗?
主框架引用业务模块才有特殊性。 --------------------编程问答--------------------
引用 29 楼 sbwwkmyd 的回复:
Quote: 引用 24 楼 android2012 的回复:
很简单的需求, 比如我正设计一个客户端的框架, 业务模块以插件的形式集成到主框架中, 业务模块是独立的,但又需要访问框架的一些对象来得到一些全局的信息,如用户登录上下文, 正常当然在框架实例化业务模块的时候传入一个对象,业务模块保留这个对象的引用来访问, 但是这样编码和开发很麻烦, 我需要的是直接在业务模块中以LoginContext.Current这样的访问方式来得到当前的上下文, 而这个LoginContext又是框架实现的, 当然不可能把具体的实现暴露给业务模块, 那么我就需要这么一个设计模式来实现, 说了这么通俗了,你能理解了吧?

既然是主框架,LoginContext.Current为什么 不可能暴露给业务模块。
引用是耦合,难道 配置+反射 就不耦合了?这不是自找麻烦吗?


可以通过接口的形式暴露.
--------------------编程问答-------------------- 使用依赖注入 --------------------编程问答-------------------- 首先用32楼的依赖注入使用单例就可以实现,而且A也没有必要设计成单例模式,完全由依赖注入组件实现。

既然敢喷几个大神级别的人物,真是后生可畏啊~
从你的描述来说,是有问题的
单例模式只有一个封装好的提供对象的方法,其他类都不知道单例的实现方式,甚至不知道是单例的,只知道有个类可以提供某对象。我需要对象,就找该类拿,至于它是不是每次从内存分配一个对象给我,还是只提供一个对象给需要的人,我完全不知道。

MVP也不是特别牛叉的人物。MVP的评定是:推广微软技术的人 --------------------编程问答--------------------
引用 31 楼 android2012 的回复:
可以通过接口的形式暴露.


可以通过接口的形式暴露.

不管什么形式的暴露,最终都逃不出一个静态变量。
就好像一个概念与一个实物,要实现就必定依附与某个实物。 --------------------编程问答--------------------
引用 7 楼 nice_fish 的回复:
连个第三个字母都不如的泪奔。


+1

对喷子 向来只围观
何况结贴率只有20%,问题分20分的 索取者喷子!! --------------------编程问答-------------------- 进来看看,笑而不语。 --------------------编程问答-------------------- 不懂 看看 --------------------编程问答-------------------- 发了几个帖子,唯一结贴的还是无满意结贴 --------------------编程问答-------------------- 这个问题直接引起了菜鸟的好奇心 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 21 楼 android2012 的回复:
Quote: 引用 19 楼 caozhy 的回复:

这种问题就好比你找一个建筑师去讨教,你拿出了你蹩脚的图纸,说设计就按照这个设计了,请问怎么砌砖。


这是一个需求, 你没能力实现就别说图纸蹩脚,OK?


哦,呵呵,呵呵。 --------------------编程问答--------------------
引用 41 楼 caozhy 的回复:
Quote: 引用 21 楼 android2012 的回复:

Quote: 引用 19 楼 caozhy 的回复:

这种问题就好比你找一个建筑师去讨教,你拿出了你蹩脚的图纸,说设计就按照这个设计了,请问怎么砌砖。


这是一个需求, 你没能力实现就别说图纸蹩脚,OK?


哦,呵呵,呵呵。

我操MVP都答不出来,我要答出来不就超越MVP了么,可是我也答不出来,我甚至压根就看不懂你问的什么 --------------------编程问答--------------------
引用 41 楼 caozhy 的回复:
Quote: 引用 21 楼 android2012 的回复:

Quote: 引用 19 楼 caozhy 的回复:

这种问题就好比你找一个建筑师去讨教,你拿出了你蹩脚的图纸,说设计就按照这个设计了,请问怎么砌砖。


这是一个需求, 你没能力实现就别说图纸蹩脚,OK?


哦,呵呵,呵呵。

哦,呵呵,呵呵。
我要盖3层楼 2楼是空的 只有1楼和3楼 就按照这个设计 请问怎么砌砖。
这是一个需求, 你没能力实现就别说图纸蹩脚,OK?
问题很难,估计外星人才能解决。。。 --------------------编程问答--------------------
引用 43 楼 luochanghua 的回复:
Quote: 引用 41 楼 caozhy 的回复:

Quote: 引用 21 楼 android2012 的回复:

Quote: 引用 19 楼 caozhy 的回复:

这种问题就好比你找一个建筑师去讨教,你拿出了你蹩脚的图纸,说设计就按照这个设计了,请问怎么砌砖。


这是一个需求, 你没能力实现就别说图纸蹩脚,OK?


哦,呵呵,呵呵。

哦,呵呵,呵呵。
我要盖3层楼 2楼是空的 只有1楼和3楼 就按照这个设计 请问怎么砌砖。
这是一个需求, 你没能力实现就别说图纸蹩脚,OK?
问题很难,估计外星人才能解决。。。

#¥%(*&¥%%¥%……&)#%¥(*&…………&#¥&*
给你们翻译一下上面这段话,“我是外星人,我也不知道怎么解决,好受挫。” --------------------编程问答-------------------- 简单思维,快乐生活
--------------------编程问答-------------------- 原来菜鸟和MVP差距这么大啊,我都看不懂什么意思。 --------------------编程问答-------------------- 对那个caozhy我也只能呵呵了. --------------------编程问答-------------------- 掩面 泪奔~ --------------------编程问答--------------------
引用 47 楼 android2012 的回复:
对那个caozhy我也只能呵呵了.


如果你能有那么一点起码的计算机知识,明白任何编程语言的概念,最后都可以用图灵等价的机器语言来描述,而编译器就是自动翻译的程序,那么就不会问那么无知的问题了。

所以,没有任何设计是必要的,不可绕过的。你非要拿你那逻辑不通的设计为难编译器,有什么意义呢? --------------------编程问答-------------------- 为什么你觉得问题很难,因为你根本不懂设计,你只是有样学样地堆砌概念。 --------------------编程问答--------------------
引用 50 楼 caozhy 的回复:
如果你能有那么一点起码的计算机知识,明白任何编程语言的概念,最后都可以用图灵等价的机器语言来描述,而编译器就是自动翻译的程序,那么就不会问那么无知的问题了。
为什么你觉得问题很难,因为你根本不懂设计,你只是有样学样地堆砌概念。

为什么你需要吃饭?因为你根本不懂生活,如果能有那么一点起码的生活知识,明白吃了任何东西最后都变成屎,那你就不会再吃饭了,你可以开始吃屎 --------------------编程问答-------------------- --------------------编程问答-------------------- 我是进来围观大神的,结果看到大神被楼主嘲笑了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,