Java 以下设计模式如何成为工厂方法。我认为这更像是一个抽象的工厂,而不是工厂方法
以下问题中使用的设计模式如何成为工厂方法?。我怀疑它既不是工厂方法,也不是抽象工厂。这是两者的混合。Java 以下设计模式如何成为工厂方法。我认为这更像是一个抽象的工厂,而不是工厂方法,java,c#,oop,design-patterns,factory-pattern,Java,C#,Oop,Design Patterns,Factory Pattern,以下问题中使用的设计模式如何成为工厂方法?。我怀疑它既不是工厂方法,也不是抽象工厂。这是两者的混合。 interface Vehicle { } class Car implements Vehicle{ } // Oil Vehicles class Bus implements Vehicle{ } class ElectricCar implements Vehicle{ } // ElectricVehicles class ElectricBus implements Ve
interface Vehicle { }
class Car implements Vehicle{ } // Oil Vehicles
class Bus implements Vehicle{ }
class ElectricCar implements Vehicle{ } // ElectricVehicles
class ElectricBus implements Vehicle{ }
interface VehicleFactory{
Vehicle make(int seats);
}
class OilVehicleFactory implements VehicleFactory{ // Oil vehicle Factory
@Override
Vehicle make(int seats){
if(seats > 5){
return new Bus();
}
else{
return new Car();
}
}
class ElectricVehicleFactory implements VehicleFactory{ // Electric Vehicle Factory
@Override
Vehicle make(int seats){
if(seats > 5){
return new ElectricBus();
}
else{
return new ElectricCar();
}
}
class Client{ // Cient Code
boolean isElectric;
void doSomething(){
VehicleFactory factory;
if(isElectric){
factory = new ElectricVehicleFactory();
}
else{
factory = new oilVehicleFactory();
}
Vehicle vehicle = factory.make(5);
}
我认为这不是一种工厂方法,因为:
谢谢您的代码示例实现了抽象工厂模式。它满足模式的定义 要调用策略设计模式,它必须满足某些约束。一个限制是,它必须有一个明确的定义 通过对照定义验证设计,您可以简单地验证您的实现是否符合模式: 抽象工厂 “提供一个接口,用于创建相关或从属对象(2)的族(1),而无需指定其具体类(3)。” (1) 您已经定义了一个抽象工厂:
interface VehicleFactory {
// Returns a
Vehicle make(int seats);
}
(2) 您已经定义了一个抽象产品系列:
interface Vehicle { }
(3) 由于抽象工厂返回抽象类型,因此客户端不必知道具体的实现:
Vehicle make(int seats);
工厂法 “定义一个接口来创建一个对象(1),但让子类决定实例化哪个类(2)。工厂方法让类将它使用的实例化延迟到子类。”(四人组) 您的代码显然不满足定义的(2) 根据定义,适当的实施方式是: (1) (2) 用法
Location destination = new Location("Workplace");
Driver driver = new BusDriver();
driver.driveToLocation(destination);
您需要做的第一件事是找出您所使用的语言,然后标记accordingly@TheGeneral很近吗?另外,模式语言是特定的吗?更适合于设计模式和讨论thereof@TheGeneral当参考其他站点时,指出设计模式是常见问题的通用解决方案通常是有帮助的。代码预期解决的设计问题/意图/要求是什么?
abstract class Driver implements VehicleFactory {
// Let subclasses decide which class to instantiate
abstract protected Vehicle make();
public void driveToLocation(Location destination) {
// Let subclasses decide which class to instantiate
Vehicle car = makeVehicle();
car.driveTo(destination);
}
}
class TaxiDriver extends Driver {
@Override
protected Vehicle makeVehicle() {
return new Taxi();
}
}
class BusDriver extends Driver {
@Override
protected Vehicle makeVehicle() {
return new Bus();
}
}
Location destination = new Location("Workplace");
Driver driver = new BusDriver();
driver.driveToLocation(destination);