今天的面试题:请问以下设计会有什么问题,应该怎样优化?

zhbsuperman 2016-03-11 11:21:26
印象中的代码:
class Shape
{
public int Type { get; set; }
public int Length { get; set; }
public int Width { get; set; }
public int Radius { get; set; }
}

public double total_Area(List<Shape> shapeList)
{
double area = 0d;
if (shapeList != null && shapeList.Count > 0)
{
foreach (Shape shape in shapeList)
{
if (shape.Type == 1)
area += Math.PI * shape.Radius * shape.Radius;
else if (shape.Type == 2)
area += shape.Width * shape.Length;
}
}
return area;
}

现在如果要加上三角形的面积计算公式:长*宽*1/2。
应该怎么加?这样设计会有什么问题?提供怎样的优化解决方案?
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhbsuperman 2016-03-11
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
这不就是要改成面向对象吗? 设计一个接口,提供一个方法比如
interface Sharp
{
double GetArea();
}
class CircleSharp:Sharp
{//实现
}
class SquartSharp:Sharp
{//实现
}
//三角形的话就是再加一个具体就行
//简单工厂就可以
谢谢,理解了,也可使用抽象类实现
  • 打赏
  • 举报
回复
这不就是要改成面向对象吗? 设计一个接口,提供一个方法比如
interface Sharp
{
double GetArea();
}
class CircleSharp:Sharp
{//实现
}
class SquartSharp:Sharp
{//实现
}
//三角形的话就是再加一个具体就行
//简单工厂就可以
  • 打赏
  • 举报
回复
引用 2 楼 zhbsuperman 的回复:
[quote=引用 1 楼 starfd 的回复:] 这不就是要改成面向对象吗? 设计一个接口,提供一个方法比如
interface Sharp
{
double GetArea();
}
class CircleSharp:Sharp
{//实现
}
class SquartSharp:Sharp
{//实现
}
//三角形的话就是再加一个具体就行
//简单工厂就可以
谢谢,理解了,也可使用抽象类实现[/quote] 别人告诉你这样行、你就说“理解了,这样行”,那么这还是只学会了一半。 要是你能告诉别人一个“思考方法”,什么样的代码可以改造,那么真的学会了。
  • 打赏
  • 举报
回复
这种设计思想的问题,就在于它的 swtich....case 方式应该改为面向对象的“多态”处理模式。这个道理很容易“死记硬背”! 不是说不可以写 if...else if ....else if....,也不是说不可以写 switch....case语句,只有当这种分支判断太多了的时候,就可以从工程角度去考虑到其扩展性,直接套用“多态”概念即可。 通常,只要能“凭直觉”就能知道要多态,我就觉得再没有必要瞎耽误时间让面试者去写什么代码了,直接就“过”了,而且知道可以有很大的软件设计潜力。然而对那些靠暗示才说出来类似多态概念的人,则需要笔试,看看他将来学习软件基本设计思想时会有多少实际潜力(是不是只知道一小半概念就满足,没有能够最终编写代码那样的人)。
秋的红果实 2016-03-11
  • 打赏
  • 举报
回复
每种情况封装到一个类中单独处理,客户有需求变动,对新需求进行封装即可 根据List<Shape>成员的不同形状,建立相应的对象进行处理
江南小鱼 2016-03-11
  • 打赏
  • 举报
回复
通过撸主的提问,我估计撸主这个面试又要回去等消息了

110,537

社区成员

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

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

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