[英]Is the below design a valid abstract factory design?
C#中的代碼
class Program
{
static void Main(string[] args)
{
var benzCar = new CarClient(new BenzCarFactory());
var bmwCar = new CarClient(new BmwCarFactory());
benzCar.BuildCar();
bmwCar.BuildCar();
}
}
public interface Wheel { }
public interface Door { }
public interface Body { }
public class BenzWheel : Wheel { }
public class BmwWheel : Wheel { }
public class HondaWheel : Wheel { }
public class BenzDoor : Door { }
public class BmwDoor : Door { }
public class HondaDoor : Door { }
public class BenzBody : Body { }
public class BmwBody : Body { }
public class HondaBody : Body { }
public interface CarFactory
{
Body BuildBody();
Wheel BuildWheel();
Door BuildDoor();
}
public class BenzCarFactory: CarFactory {
public Body BuildBody() { return new BenzBody(); }
public Wheel BuildWheel() { return new BenzWheel(); }
public Door BuildDoor() { return new BenzDoor(); }
}
public class BmwCarFactory : CarFactory
{
public Body BuildBody() { return new BmwBody(); }
public Wheel BuildWheel() { return new BmwWheel(); }
public Door BuildDoor() { return new BmwDoor(); }
}
public class HondaCarFactory : CarFactory
{
public Body BuildBody() { return new HondaBody(); }
public Wheel BuildWheel() { return new HondaWheel(); }
public Door BuildDoor() { return new HondaDoor(); }
}
public class CarClient
{
private CarFactory _carFactory;
public CarClient(CarFactory factory)
{
_carFactory = factory;
}
public void BuildCar()
{
_carFactory.BuildBody();
_carFactory.BuildDoor();
_carFactory.BuildWheel();
// Remaining Business logic to assemble the parts and build a car.
}
}
當然,這似乎是有效的抽象工廠模式 -您要確保只有某些品牌的零件與某些品牌的汽車一起使用。
但是,我必須對您的課堂設計有所了解。
車輪/門的功能在一輛車與另一輛車之間沒有什么不同。 同樣精確的車輪/輪胎可以在數十種汽車模型生產線上使用。 車輪具有特性,但功能相同。 寶馬不能聲稱17英寸車輪具有排他性。
因此,在您的抽象工廠實現上做得很好:)但是請繼續進行對象設計。
作為抽象工廠模式的一個很好的例子,看看Java如何做它的UI工具包並在它不存在的桌面應用程序世界中改變UI主題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.