Подтвердить что ты не робот

Разница между шаблоном структурного проектирования и шаблоном поведения?

Я читал об основах шаблонов проектирования и натолкнулся на два основных определения структурных паттернов и поведенческого шаблона, которые:

Структурные шаблоны проектирования: как правило, имеют дело с отношениями между объектами, что упрощает работу этих объектов.

Поведенческие шаблоны проектирования: используется для связи между объектами и упрощает и более гибко связывает эти объекты.

Читая его, я не могу различать их, может ли кто-нибудь направить меня, как они отличаются друг от друга, предоставив несколько простых примеров?

4b9b3361

Ответ 1

Я довольно не уверен, что мои объяснения и примеры действительно охватывают самые важные принципы

Подумайте о поведении в качестве сценариев, внешних по отношению к структурам. Некоторая структура данных может "использоваться" в нескольких вариантах поведения/сценариях.

С другой стороны, думайте о связанной с структурой логике как о внутренней структуре. Как следствие, структура влияет на различные изменения и выполняет некоторые действия.

При этом мы можем продемонстрировать следующее:

Структурные шаблоны структуры определяют веб-журнал, определяя его составляющие как бизнес-объекты более высокого уровня, такие как Article/Image/Comment. Компоненты знают друг о друге и как подключаются друг к другу.

$image = new Image;
$image->title = 'Image title';
$image->url = 'http://example.com/file.ext';
$image->save(); // will save the image to a DB

$article->title = 'The title i have set';
/* $article->url_key = 'the_title_i_have_set'; */
// this ^^ element of logic will be done automatically by the article
$article->addImage($image); // will save the connection between the
                            // article and the image to DB

Шаблоны проектирования поведения будут определять веб-журнал по его вариантам использования (сценарии) с использованием бизнес-объектов более низкого уровня, таких как Article/ArticleToImage/Image/ArticleToComment. Бизнес-объекты не знают друг о друге и "маневрируются" на месте по логике сценариев.

$image = new Image;
$image->title = 'Image title';
$image->url = 'http://example.com/file.ext';
$image->save(); // will save the image to a DB

$article->title = 'The title i have set';
$article->url_key = $controller->getURlKey($article->title);
$article->save(); // saves article to DB

$article_to_image = new ArticleToImage;
$article_to_image->article = $article;
$article_to_image->image = $image;
$article_to_image->save();

TL; DR

Если объекты хранения интеллектуальны (содержат логику), то структурный дизайн. Если объекты хранилища тупые (они могут хранить данные только и передавать их в БД), тогда вам понадобится поведенческий дизайн для их управления.

Ответ 2

Лучший способ объяснить - взять два примера из двух категорий.

Композит из структурных паттернов определяет структуру, подобную дереву, поэтому фокусируется на связи. Один для многих и имеет тип отношений, так что все и часть можно рассматривать одинаково.

Образец наблюдателя, с другой стороны, из шаблонов поведения по-разному фокусируется на коммуникации. Как мы можем сообщить заинтересованным сторонам о каких-либо изменениях объекта. Тип издателя для подписчика. Не определяет строгую структуру, а заставляет применять методы, т.е. Каналы связи.

Надеюсь, что это полезно.

Ответ 3

Извините, что мое объяснение будет в С#.

Наблюдатель - это поведенческая модель: представляет собой интерфейс, позволяющий объекту общаться без каких-либо конкретных знаний друг о друге. Также известен как шаблон публикации-подписки. Объект для информирования другого объекта о его состоянии без знания этих объектов.

Адаптер - структурный шаблон: Адаптер преобразует интерфейс данного класса в другой класс, запрошенный клиентом. Оберните существующий класс новым интерфейсом. Импеданс соответствует старому компоненту новой системы. Позволяет классам работать вместе, когда это невозможно из-за несовместимых интерфейсов.

Пример адаптера:

interface ITarget
{
  List<string> GetProducts();
}


public class VendorAdaptee
{
   public List<string> GetListOfProducts()
   {
      List<string> products = new List<string>();
      products.Add("Gaming Consoles");
      products.Add("Television");
      products.Add("Books");
      products.Add("Musical Instruments");
      return products;
   }
}


class VendorAdapter:ITarget
{
   public List<string> GetProducts()
   {
      VendorAdaptee adaptee = new VendorAdaptee();
      return adaptee.GetListOfProducts();
   }
}


class ShoppingPortalClient
{
   static void Main(string[] args)
   {
      ITarget adapter = new  VendorAdapter();
      foreach (string product in adapter.GetProducts())
      {
        Console.WriteLine(product);
      }
      Console.ReadLine();
   }
}

Пример наблюдателя: обработчик событий и просто события

using System;
namespace wildert
{
    public class Metronome
    {
        public event TickHandler Tick;
        public EventArgs e = null;
        public delegate void TickHandler(Metronome m, EventArgs e);
        public void Start()
        {
            while (true)
            {
                System.Threading.Thread.Sleep(3000);
                if (Tick != null)
                {
                    Tick(this, e);
                }
            }
        }
    }
        public class Listener
        {
            public void Subscribe(Metronome m)
            {
                m.Tick += new Metronome.TickHandler(HeardIt);
            }
            private void HeardIt(Metronome m, EventArgs e)
            {
                System.Console.WriteLine("HEARD IT");
            }

        }
    class Test
    {
        static void Main()
        {
            Metronome m = new Metronome();
            Listener l = new Listener();
            l.Subscribe(m);
            m.Start();
        }
    }
}

Ответ 4

Структурные шаблоны используются для определения статических свойств системы (см. Диаграмма классов).

Пример: шаблон Factory может использоваться для создания объектов, которые составляют вашу систему. У вас может быть объект Button, который имеет разные графические свойства в Windows и OS X. Factory шаблон создаст Button, независимо от ОС, и созданный объект будет иметь те же интерфейсы на обеих ОС, выставляя такое же поведение, несмотря на наличие разных внутренних компонентов.

Поведенческие шаблоны используются для определения динамического поведения системы (см. Activity, Sequence и т.д.).

Пример: шаблон адаптера можно использовать во время выполнения, чтобы прозрачно разрешить сопряжение двух объектов, которые не разделяют интерфейс между ними. Он эффективно изменяет поведение объекта во время выполнения.