依赖倒置原则
高层模块不应该依赖于低层模块,二者都应该依赖于抽象
抽象不应该依赖于细节,细节应当依赖于抽象。
换言之,要面向接口(抽象类)编程,而不是面向实现编程。
namespace 依赖倒置原则
{
public abstract class Shape
{
public abstract string GatPath();
}
}
namespace 依赖倒置原则
{
public class Circle : Shape
{
public override string GatPath()
{
return "圆形";
}
}
}
namespace 依赖倒置原则
{
public class Rectangle : Shape
{
public override string GatPath()
{
return "长方形";
}
}
}
namespace 依赖倒置原则
{
public class Graphice
{
private Shape _Shape;
public Graphice(Shape shape)
{
this._Shape = shape;
}
public void SetShape(Shape shape)
{
this._Shape = shape;
}
public void Stroke( )
{
string path = _Shape.GatPath();
Console.WriteLine($"描边{path}");
}
public void Fill( )
{
string path = _Shape.GatPath();
Console.WriteLine($"填充{path}");
}
}
}
将shape作为私有的变量添加到graphics类中去。通过构造函数与Set方法对shape进行赋值。
这样做之后我们的stroke方法就不需要传参了
namespace 依赖倒置原则
{
class Program
{
static void Main(string[] args)
{
Graphice g = new Graphice(new Rectangle());
g.Stroke();
g.Fill();
g.SetShape(new Circle());
g.Stroke();
g.Fill();
}
}
}
在实例化时将子类传入Graphice,若想要更改画的图形使用set方法。