工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中,
而简单工厂方法是直接创建子类。
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
CarCreate carFactory =new BlueCarCreate();
Car car=carFactory.CarFactory();
car.Drive();
car.Stop();
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
public abstract class Car
{
public abstract string Drive();
public abstract string Stop();
}
public class RedCar :Car
{
public override string Drive()
{
return "RedCar is Drived";
}
public override string Stop()
{
return "RedCar is Stoped";
}
}
public class BlueCar :Car
{
public override string Drive()
{
return "BlueCar is Drived";
}
public override string Stop()
{
return "BlueCar is Stop";
}
}
//工厂类
public abstract class CarCreate
{
public abstract Car CarFactory();
}
//根据工厂的子类,在其子类中实例
public class RedCarCreate :CarCreate
{
public override Car CarFactory()
{
return new RedCar();
}
}
//根据工厂的子类,在其子类中实例
public class BlueCarCreate :CarCreate
{
public override Car CarFactory()
{
return new BlueCar();
}
}
那么调用 {
public abstract string Drive();
public abstract string Stop();
}
public class RedCar :Car
{
public override string Drive()
{
return "RedCar is Drived";
}
public override string Stop()
{
return "RedCar is Stoped";
}
}
public class BlueCar :Car
{
public override string Drive()
{
return "BlueCar is Drived";
}
public override string Stop()
{
return "BlueCar is Stop";
}
}
//工厂类
public abstract class CarCreate
{
public abstract Car CarFactory();
}
//根据工厂的子类,在其子类中实例
public class RedCarCreate :CarCreate
{
public override Car CarFactory()
{
return new RedCar();
}
}
//根据工厂的子类,在其子类中实例
public class BlueCarCreate :CarCreate
{
public override Car CarFactory()
{
return new BlueCar();
}
}
CarCreate carFactory =new BlueCarCreate();
Car car=carFactory.CarFactory();
car.Drive();
car.Stop();
浙公网安备 33010602011771号