new 的问题
常规的对象创建方法: Road road = new Road();
-- 实现依赖,不能应对“具体实例化类型”的变化。
解决思路:
-- 封装变化点--哪里变化,封装哪里
-- 潜台词:如果没有变化,当然不需要额外的封装
工厂模式的缘起
·变化点在"对象创建",因此就封装"对象创建"
·面向接口编程--依赖接口,而非依赖实现
·最简单的解决方法:
创建一系列相互依赖的对象
假设一个游戏开发场景:
我们需要构造"道路","房屋","地道","丛林"....
从一个对象工厂到一组有关系的对象工厂:
static void Main(string[] args)
{
Road road = RoadFactory.CreateRoad();
...
Building building = RoadFactory.CreateBuilding();
}
//==============上面的客户程序相对稳定,下面为变化点================
class RoadFactory
{
public static Road CreateRoad() //把Road创建成抽象类
{
return new Road(); //这里返回具体的实例,如WaterRoad,DryRoad
}
public static Road CreateBuilding()
{
return new Building();
}
public static Road CreateTunnel()
{
return new Tunnel();
}
...
}
{
Road road = RoadFactory.CreateRoad();
...
Building building = RoadFactory.CreateBuilding();
}
//==============上面的客户程序相对稳定,下面为变化点================
class RoadFactory
{
public static Road CreateRoad() //把Road创建成抽象类
{
return new Road(); //这里返回具体的实例,如WaterRoad,DryRoad
}
public static Road CreateBuilding()
{
return new Building();
}
public static Road CreateTunnel()
{
return new Tunnel();
}
...
}