首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >固体: SRP + ISP

固体: SRP + ISP
EN

Stack Overflow用户
提问于 2015-05-28 18:50:13
回答 1查看 154关注 0票数 1

我正在努力理解坚实的原则。我想我很理解Liskov替换原理,但是对于其他的,我有一些问题。

举一个例子。我有两个接口:Enginecar stereo。问题是:对于一辆车,我们有6副眼镜。

所以,我的车实现了EngineCar Stereo接口。

但是对于6种眼镜,我应该实现它们,还是应该将它们放置在一系列的眼镜上,知道有4种侧面的眼镜可以向上或向下,还有2块挡风玻璃(glasses由两者继承)。

第一个问题是,我不能实现4倍同一副眼镜。

因此,第二个似乎是好的,但我担心,打破SRP,我不知道什么是确切的“责任”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-21 06:57:28

正确的设计方法是

要接口的代码,而不是类。

根据这一原则,我建议使用像IWindowISurfaceIWindShield这样的接口,其层次结构如下所示

代码语言:javascript
复制
interface ISurface
{
  //surface specific properties which ideally should be DI-ed
  public SurfaceType SurfaceType {get; set;}
  public decimal Opacity {get;set;}
  public decimal Thickness {get; set;}
}

代码语言:javascript
复制
interface IWindow:ISurface
{
  //Window behavior specific properties and methods
  public void lowerWindow();
  public WindowHeight WindowLevel(){get;set;}
  public void shutWindow();
  // ...and more such window specific behavior
}

代码语言:javascript
复制
interface IWindShield:ISurface
{
  //WindShield behavior specific properties and methods
  public bool IsFogged(){get;set;}
  public bool IsClean(){get;set;}
  // ...and more such window specific behavior
}

最后,在组装具有所有功能的汽车时(可能使用的是Builder模式),您可以在类型为ISurface类型的car类中得到一个数组,如下所示

代码语言:javascript
复制
class Car
{
   string carName;
   Engine carEngine;
   Stereo carStereo;
   List<ISurface> carGlasses;
   .....
   // other Car parts
   // this is a typical builder pattern example
}

这是使用CarBuilder类型类(例如MyCarBuilder )构建的

代码语言:javascript
复制
interface CarBuilder
{
  public Car MyCar {get; set;}
  void AddEngine();
  void AddStereo();
  void AddGlasses();// this is what works on adding ISurface List items
  // and other car building methods
}

和真正的建筑商类

代码语言:javascript
复制
class MyCarBuilder:CarBuilder
{
    //... implements all methods of building your custom car
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30514833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档