簡體   English   中英

以下設計是否是有效的抽象工廠設計?

[英]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.
        }       
    } 
  1. 這是有效的抽象工廠嗎?
  2. 您認為不同的設計模式會比這更好嗎?
  3. 為了簡單起見,我僅添加了三個部分。 當我們只有很少的其他部分時,是否應該將“ Builder”模式與Abstract Factory相結合來構建Car對象?

當然,這似乎是有效的抽象工廠模式 -您要確保只有某些品牌的零件與某些品牌的汽車一起使用。

但是,我必須對您的課堂設計有所了解。

  • 您有沒有實際生產汽車的CarFactory?
  • 但是您有汽車客戶嗎?
  • 同樣,接口應該用於在實現上行為上功能上有所不同的類。

車輪/門的功能在一輛車與另一輛車之間沒有什么不同。 同樣精確的車輪/輪胎可以在數十種汽車模型生產線上使用。 車輪具有特性,但功能相同。 寶馬不能聲稱17英寸車輪具有排他性。

因此,在您的抽象工廠實現上做得很好:)但是請繼續進行對象設計。

作為抽象工廠模式的一個很好的例子,看看Java如何做它的UI工具包並在它不存在的桌面應用程序世界中改變UI主題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM