依赖关系的倒置
抽象不应该依赖于实现细节,实现细节应该依赖于抽象
动机(Motivation)
在软件系统中,经常面临着"某些结构复杂的对象"的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
如何应对这种变化?如何向"客户程序"(使用这些对象的程序)"隔离出"这些易变对象",从而使得"依赖这些易变对象的客户程序"不随着需求改变而改变?
意图(Intent)
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象
结构
public class GameSystem
{
public void Run()
{
NormalActor normalActor1 = new NormalActor(); //徒步的小兵3个
NormalActor normalActor2 = new NormalActor();
NormalActor normalActor3 = new NormalActor();
FlyActor flyActor1 = new FlyActor(); //飞行的小兵2个
FlyActor flyActor2 = new FlyActor();
WaterActor waterActor1 = new WaterActor(); //潜水的小兵2个
WaterActor waterActor2 = new WaterActor();
}
}
GameSystem依赖于内部的三种Actor
{
public void Run()
{
NormalActor normalActor1 = new NormalActor(); //徒步的小兵3个
NormalActor normalActor2 = new NormalActor();
NormalActor normalActor3 = new NormalActor();
FlyActor flyActor1 = new FlyActor(); //飞行的小兵2个
FlyActor flyActor2 = new FlyActor();
WaterActor waterActor1 = new WaterActor(); //潜水的小兵2个
WaterActor waterActor2 = new WaterActor();
}
}
GameSystem依赖于内部的三种Actor