2011-01-04 3 views
0

В чем разница между двумя принципами дизайна?Принцип построения

  1. «программа для интерфейса, а не реализация» и
  2. «зависит от абстракции, не зависит от конкретного класса».

Эти два принципа говорят одно и то же, но двумя разными способами.

С уважением,
Мээндра Athneria
Мумбаи Индия

+0

Этот вопрос будет лучше для программистов.stackexchange.com –

ответ

6

Интерфейс абстракция конкретного класса, так 2. является подмножеством 1. Принцип 1. имеет более широкое применение (вы можете использовать его для любого вид интерфейса, а не только те, которые используются в объектно-ориентированном программировании).

+0

, если мы сможем использовать принцип1, тогда почему существует принцип 2. Не думаете ли вы, что это создает больше путаницы? –

+0

@Mahendra Athneria К сожалению, это реальность. Многие люди ссылаются на одну и ту же концепцию под разными именами. Я бы хотел, чтобы каждая концепция была отмечена GUID и доступна для поиска в базе данных, но, увы! –

2

Они в сущности говорят одно и то же в разных словах.

Вы должны написать свой класс, чтобы он зависел от абстрактной идеи (например, интерфейса) вместо конкретной реализации идеи. Это позволяет вам изменять поведение на куски, а не переписывать целые куски кода.

См. Injection Dependancy Injection.

Пример:

public class Chef : IResturauntWorker 
{ 
    // This is an example of writing to an interface instead of an 
    // an implementation. Because the Chef class implements the 
    // IResturauntWorker interface, the chef can be swapped in with other 
    // resturaunt workers like bussers or waiters. 

    public void Chop(Carrot c) 
    { 
     // code to chop a carrot 

     // this is an example of depending on an implementation 
     // because Carrot is a concrete class, this method can 
     // only be used with a Carrot 
    } 

    public void Chop(IVegetable c) 
    { 
     // code to chop a Vegetable 

     // this is an example of depending on an abstraction 
     // because IVegetable is a abstraction of an idea 
     // (a vegetable, in this case), this method can be 
     // used with any class that implements IVegetable, 
     // including carrots, celery, onions, etc. 
    } 
} 
+0

если оба являются одним и тем же в разных словах, то почему эти два являются разными принципами в шаблонах дизайна? –

+0

Интерфейс - это абстракция, а конкретный класс - это реализация. Вы должны написать свой код, чтобы он был/может быть легко абстрагирован, и вы не должны зависеть от конкретной реализации класса в вашем коде, чтобы разрешить реализацию и использование реализаций, если ожидается абстракция. Если вы не знакомы с инъекцией зависимостей, я рекомендую исследовать это, поскольку это важный принцип, который демонстрирует эти (и требует) принципы, которые вы цитировали. –

+0

См. Мое редактирование с примером. –

0

Builder design pattern Подробная информация. Это окончательный пример принципов, которые вы просто указали.

+0

что-то вроде абстрактного метода Factory. я запутался между ними. не могли бы вы рассказать о различии между ними? –

0

Интерфейс - это не что иное, как предоставление возможности общаться с разными типами реализации. Абстракция не что иное, как создание универсального класса с абстрактным методом.

Смежные вопросы