c#关于接口增加新方法问题

ccssddnnsb 2012-12-20 04:35:26
static voic Main()
{
Console.WriteLine("Plesas select printer:");
string printerName = Console.Readline();
IPrint printer = null;

if(printerName == "HP")
{
printer = new HPPrinter();
}
else if(printerName == "IBM")
{
printer = new IBMPrinter();
}


printer.PrintPreview();
printer.Print();
}
--------------
public class HPPrint : IPrint
{
public void PrintPreview()
{
Console.WriteLine("this is HP Printer");
}

public void Print()
{
Console.WriteLine("this is HP Printer");
}
}

public class IBMPrint : IPrint
{
public void PrintPreview()
{
Console.WriteLine("this is IBM Printer");
}

public void Print()
{
Console.WriteLine("this is IBM Printer");
}
}

好上面代码不错了,但有一天突然需要加一个方法 size() 设置打印大小,正常想法是给接口增加一个方法,子类也去实现它。但如是子类数量很多时,这将是一个苦逼的工作。我想问一下如何处理这种情况,让增加新方法更容易,不用涉及其它子类。
...全文
2306 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyf_liyunfeng 2013-01-04
  • 打赏
  • 举报
回复
适和够用的,无论什么样的设计模式都无法解决接口变化的问题,这也是考验设计水平的地方。要不然人人都会设计模式了,难道说设计水平都会是一个水平吗
莫聆 2013-01-04
  • 打赏
  • 举报
回复
根据设计原则,是要依赖接口,而不是依赖实现,其另外一层意思就是依赖的接口是不能变化的,这就需要保证接口设计是合适和够用的,无论什么样的设计模式都无法解决接口变化的问题,这也是考验设计水平的地方。要不然人人都会设计模式了,难道说设计水平都会是一个水平吗?
wanghui0380 2013-01-03
  • 打赏
  • 举报
回复
呵呵,美工都会,难道程序员不会 美工写css,当多个dom需要一样的css他怎么办?当多个dom有一部分样式是一样的,还有一部分是不一样的他又什么办?当已经定义了样式1,却发觉这个场景需要根据细节做局部修改,他又怎么办? 太阳底下木新鲜事,接口或者样式不是无条件的,接口是有目标滴,围绕目标编写你的代码,而不是根本就不看目标,一上来就号称“面向接口”
nickppa 2013-01-03
  • 打赏
  • 举报
回复
顶29楼,不过我对这个访问者模式存在看法,可能我还不能领悟它的精髓吧
dpcrman 2013-01-03
  • 打赏
  • 举报
回复
牛掰,学习了
viki117 2012-12-28
  • 打赏
  • 举报
回复
接口污染,就是指的你这种情况,这个时候分割接口来避免接口污染,简单说就是在声明一个接口,让需要实现的类实现; 如果不想改代码,你就当初应该选择继承~~
535cheng110 2012-12-28
  • 打赏
  • 举报
回复
接口与具体类之间,放一个抽象类来解决

public abstract class PrintBase:IPrint
public class HPPrint : PrintBase
public class IBMPrint : PrintBase
流木晴天 2012-12-27
  • 打赏
  • 举报
回复
很好,这就涉及到设计模式的应用问题了
weikano 2012-12-27
  • 打赏
  • 举报
回复
adapter
claymore1114 2012-12-27
  • 打赏
  • 举报
回复
再 声明一个接口,让需要的子类实现。
雪狼online 2012-12-27
  • 打赏
  • 举报
回复
不是接口的问题,是你的问题,其实你有解决方法,但是你过分追求完美化!你不可能做到完美。
lihuinihao6315 2012-12-26
  • 打赏
  • 举报
回复
Visitor 访问者模式是解决这个问题的好办法,请查看。
w051108 2012-12-25
  • 打赏
  • 举报
回复
我不说话 ,只学习。。。
_猫了个咪 2012-12-25
  • 打赏
  • 举报
回复
接口并不是越多越好。。 定义一个抽象类可以解决许多问题。
wuhaipinm 2012-12-25
  • 打赏
  • 举报
回复
个人觉得更简单的方法是可以写一个主类MainPrint 所有子类继承接口的同时也继承这个主类 格式如下 HPPrint : MainPrint, IPrint 这样在MainPrint下定义的方法及属性都可在子类使用,并且不影响到接口结构。 当然你也可以部分子类继承MainPrint,部分不继承
zzxnsd 2012-12-24
  • 打赏
  • 举报
回复
组合代替继承。 http://www.cnblogs.com/x-xk/archive/2012/12/21/2823401.html 这里面引用了head first设计模式的第一个例子,很好的说明了这个问题。
燕雀之志 2012-12-24
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
使用接口时以为可以像class一样地轻松继承,这必然感到“苦逼”!这也是我刚刚使用.net(2002~2004)的前几年的感觉。我其实那个时候对它不能像Eiffel一样支持多重继承比较不以为然。不过慢慢就习惯了。 基本上,如果你需要扩展一个接口,你需要设计一个Version2之类地。比如原来有一个 C# code ? 1234567 public interf……
学习了,关注你了,希望能看到你更多的评论与分享。
DTSpark_2017 2012-12-22
  • 打赏
  • 举报
回复
东邪独孤 2012-12-22
  • 打赏
  • 举报
回复
这有何难,用扩展方法就行了,用不着那么复杂。
code_li 2012-12-22
  • 打赏
  • 举报
回复
ls 大师 都说的蛮有道理的 学习ing 3Q分享
加载更多回复(20)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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