static void Main(string[] args) { // Проблема: // SimpleProduct sproduct = new SimpleProduct(); // sproduct.DoSomething(); // Если по каким-либо причинам, SimpleProduct изменится, то придётся менять все обращения к SimpleProduct по всему проекту. // В данном примере вызов один, но вдруг их будет 20? Каждый раз менять 20 мест? // К тому же жизненный цикл даного объекта контролируется на клиенте. // ... // Не стоит так делать, создадим отдельный класс для формирования продукта Factory simpleFactory = new SimpleFactory(); // Создадим продукт с помощью фабричного метода AbstractProduct aproduct = simpleFactory.CreateProduct(ProductType.ProductA); aproduct.DoSomething(); AbstractProduct bproduct = simpleFactory.CreateProduct(ProductType.ProductB); bproduct.DoSomething(); AbstractProduct nproduct = simpleFactory.CreateProduct(ProductType.ProductN); nproduct.DoSomething(); // Вуаля, подробности создания объекта скрыты Console.ReadLine(); }
static void Main(string[] args) { Factory factory = new Factory(); AbstractProduct productA = factory.generateInstance(ProductType.ProductA); productA.showMessage(); AbstractProduct productB = factory.generateInstance(ProductType.ProductB); productB.showMessage(); Console.Read(); }