C# 以下设计是否为有效的抽象工厂设计?

C# 以下设计是否为有效的抽象工厂设计?,c#,design-patterns,abstract-factory,C#,Design Patterns,Abstract Factory,C代码# 这是一个有效的抽象工厂吗 你认为不同的设计模式会比这更好吗 为了简单起见,我只添加了三个部分。当我们没有其他零件时,我们是否应该将“构建器”模式与抽象工厂相结合来构建汽车对象 这显然是一个有效的方法——你要确保只有特定品牌的零件与特定品牌的汽车搭配 然而,我不得不对你的课堂设计表示不满 你有一家汽车制造厂,但实际上并不生产汽车 但你有一个这样的汽车客户 此外,接口应适用于不同实现之间行为在功能上不同的类 车轮/车门在功能上在不同的汽车上没有区别。同样精确的车轮/轮胎可以在几十个车型

C代码#

  • 这是一个有效的抽象工厂吗
  • 你认为不同的设计模式会比这更好吗
  • 为了简单起见,我只添加了三个部分。当我们没有其他零件时,我们是否应该将“构建器”模式与抽象工厂相结合来构建汽车对象

  • 这显然是一个有效的方法——你要确保只有特定品牌的零件与特定品牌的汽车搭配

    然而,我不得不对你的课堂设计表示不满

    • 你有一家汽车制造厂,但实际上并不生产汽车
    • 但你有一个这样的汽车客户
    • 此外,接口应适用于不同实现之间行为在功能上不同的类
    车轮/车门在功能上在不同的汽车上没有区别。同样精确的车轮/轮胎可以在几十个车型系列中使用。车轮具有特性,但功能相同。宝马不能在17英寸的车轮上宣称独家

    所以,在抽象工厂实现方面做得很好:)但继续进行对象设计


    关于抽象工厂模式的一个很好的例子,我们来看看Java是如何使用它的UI工具包的,并在它不存在的桌面应用程序世界中更改UI主题的

    我们需要更多地了解您的需求。是的,这是一个抽象工厂。它是否符合您的要求?不知道。问题2和3很难回答,因为这看起来特别像是演示抽象工厂模式的玩具代码感谢Christian,我想我应该使用CarPartsFactory而不是CarFactory,然后我应该使用其他名称而不是CarClient。谢谢
        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.
            }       
        }