问如果我有一个方法,但这个方法有问题,我们换成了其他的设计,但是又不想修改原有程序中的invoke的code,应该用什么模式设计比较合适.
例:
class A{
myinvoke();
}main(){
A a =new a();
a.myinvoke();
}然后A中加入新的方法
class A{
myinvoke();
myinvokeNew();
}问题就是在main中不修改原有代码,采用什么模式设计比较好,谢谢啦
例:
class A{
myinvoke();
}main(){
A a =new a();
a.myinvoke();
}然后A中加入新的方法
class A{
myinvoke();
myinvokeNew();
}问题就是在main中不修改原有代码,采用什么模式设计比较好,谢谢啦
解决方案 »
- XmlDocument的getElementById()返回null
- C#中什么类型对应C++中的LPWSTR(wchar_t *)?
- C#实现“将网页转成图片”功能,高手请进,马上给分……
- 问一个关于unicode编码的问题
- 这段代码怎么写?(在线等)
- 关于combobox绑定数据的问题。。
- 急救!很郁闷的一个问题。烦了我好半个月了!~!高手快来帮帮我
- 泛型 集合中 “时间”元素的 排序问题
- 博立点菜机接口开发
- 如何用AxSHDocVw.AxWebBrowser.Navigate()方法控制页面的刷新?
- treeview 删除节点
- 今天看入门经典被例题难住了 看了一天都没看明白!求个好人给解释下!
其实如果可以重构原有程序的话,建议你还是重构一下的比较好....
在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式。
工厂、策略、桥接、模板方法、代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求
层、MVC、IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体角度去看项目的架构。设计需要合理性,架构同样追求合理性,这就是架构模式的用途。
C#的经典样例petshop中,采用分层思想构架了整个网站,这里的分层就是体系结构模式;而在数据库访问层,则采用工厂模式来泛化数据库操作,使得业务层不需要关心您现在的数据库是SQL server的,还是oracle的。这就是设计模式的使用。
模式应用不是一两句话能够说清楚的,也不是一天两天能够体会的,需要楼主慢慢体会与学习。
interface IMyInvokeNew
{
public void MyInvokeNew();
}
public class AAdapater : IMyInvokeNew
{
private A a = new A();
public void MyInvokeNew()
{
//这里面就可以用a对象
}
}main()
{
IMyInvokeNew a = new AAdapater();
a.MyInvokeNew();
}
{
// Methods
void AlgorithmInterface();
}// "ConcreteStrategyA"class ConcreteStrategyA : IStrategy
{
// Methods
public void AlgorithmInterface()
{
Console.WriteLine(
"Called ConcreteStrategyA.AlgorithmInterface()");
}
}// "ConcreteStrategyB"class ConcreteStrategyB : IStrategy
{
// Methods
public void AlgorithmInterface()
{
Console.WriteLine(
"Called ConcreteStrategyB.AlgorithmInterface()");
}
}// "ConcreteStrategyC"class ConcreteStrategyC : IStrategy
{
// Methods
public void AlgorithmInterface()
{
Console.WriteLine(
"Called ConcreteStrategyC.AlgorithmInterface()");
}
}// "Context"class Context
{
// Fields
IStrategy strategy; // Constructors
public Context( IStrategy strategy )
{
this.strategy = strategy;
} // Methods
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}/// <summary>
/// Client test
/// </summary>
public class Client
{
public static void Main( string[] args )
{
// Three contexts following different strategies
Context c = new Context( new ConcreteStrategyA() );
c.ContextInterface(); Context d = new Context( new ConcreteStrategyB() );
d.ContextInterface(); Context e = new Context( new ConcreteStrategyC() );
e.ContextInterface();
}
}
这里的模式文章不错,你可以看看
adapter和strategy都是要在原有的代码上面做修改的,跟facade一样,当然如果有interface那就完全没有问题了,
我这边觉得看如果suppose没有interface并且在不动main里面代码的情况,有没有比较好的方法,即使抛开GOF的设计模式
也可以,或者用什么danamic proxy啊什么之类的.谢谢
看看spring.net能不能解决你的问题
class A:oldA
{
public void myinvokeNew()
{
}
}