0

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. 簡単にするために、3 つの部分だけを追加しました。他にパーツが少ないときは、'Builder' パターンと Abstract Factory を組み合わせて Car オブジェクトを作成しますか?
4

1 に答える 1