php - 结构设计 Pattern 与行为设计 Pattern 之间的差异?

  显示原文与译文双语对照的内容
0 0

我刚刚在看设计模式的基础知识和接触到的两个基本的定义Structural Patterns和Behavioral Pattern它类似:

Structural Design Patterns:Generally处理这些实体之间的关系实体,使用户更容易协同工作。

Behavioral Design Patterns:Used各实体之间的通信,并使其更容易和更灵活的对这些实体进行通信。

阅读,这不,有人能指导我如何区分它们是不同的,在这里给出一些简单的例子?

时间:原作者:7个回答

0 0

我很确定如果我的解释和例子是介绍最重要的原则

考虑行为,场景外部的结构。 某种数据结构可以" 使用" 在多个behaviors/scenarios 。

另一方面把结构相关的逻辑,如在内部的结构。 获取受各种更改和执行一些操作本来就有的结构。

话虽这么说,我们可以举例说明如下:

作为更高级别的结构定义的web log,可以定义设计模式将其支持者业务对象(BusinessObjects)如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

其使用情形( 场景) 中使用低级行为设计模式的web log将定义的业务对象,如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

如果存储对象的智能( 包含逻辑) 结构设计的。 如果存储对象是傻子( 只能存储数据并将其传输到数据库),你将需要一个行为设计到对其进行管理。

原作者:
0 0

最佳方法解释实验需要两个例子从两类。

复合from Structural图案定义树形结构一样,所以关注的关系。 一对多并具有一种关系,使得整个和部分可以看很像。

观察者模式另一方面从Behavioral设计模式关注通信。 我们怎么让当事人知道任何对对象的更改。 发布服务器到订阅服务器的都行。 不定义严格的结构,但运用有关实现方法,我如果不包含。 通道的细节问题。

希望是有用的。

原作者:
0 0

结构模式是用于定义的静态属性系统( 参见 Class图表 ) 。

示例: 工厂模式可用于创建实体它们构成系统。 可以有对象 Button具有不同图形属性在Windows vs 。 os X 。 工厂模式将创建 Button无论OS上都和创建的对象将具有相同的接口公开的OS 相同行为尽管拥有不同的内核技术。

行为模式用于定义系统的动态行为( 参见 ActivitySequence 等等。 图) 。

示例: 适配器模式可以在运行时用来透明地允许它们之间不共享接口的接口2 的实体。 可以有效地将更改在运行时对象的行为

原作者:
0 0

抱歉我的说明会在C#中。

观察者的行为模式: 显示接口,允许对象进行通信,而任何具体知识的了解对方 也称为发布订阅图案。 对象来通知其他对象绕其状态,而再那些没用的对象。

适配器的结构模式: Adapter给定类'接口转换为另一个类由客户端请求。 现有类都加上new interface 。 阻抗匹配的旧组件到new system 。 允许类协同工作时这是不可能由于不兼容的接口。

适配器示例:

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();
        }
    }
}
原作者:
...