Каковы некоторые реальные примеры Шаблонов разработки, используемых в [закрытом] программном обеспечении

Ниже приведено решение.

function callbackfunction(){   
   window.angularComponent.runThisFunctionFromOutside();
}
       <script>
          System.config({
            transpiler: 'typescript', 
            typescriptOptions: { emitDecoratorMetadata: true }, 
            packages: {'js/app': {defaultExtension: 'ts'}} 
          });
          System.import('js/app/main')
                .then(null, console.error.bind(console));
        </script>

My App.component.ts

import {Component NgZone} from 'angular2/core';
import {GameButtonsComponent} from './buttons/game-buttons.component';
@Component({
    selector: 'my-app',
       template: ' blblb'
})
export class AppComponent {

  constructor(private _ngZone: NgZone){
  window.angularComponent = {runThisFunctionFromOutside: this.runThisFunctionFromOutside, zone: _ngZone};
}


    runThisFunctionFromOutside(){
      console.log("run");
    }
}
7
задан Rob Cooper 30 August 2008 в 17:15
поделиться

10 ответов

Ах ха момент для меня для шаблона "наблюдатель" должен был понять, насколько тесно связанный это с событиями. Рассмотрите Windows-программу, которая должна достигнуть свободно связи между двумя формами. Это может легко быть выполнено с шаблоном "наблюдатель".

Код ниже шоу, как Form2 запускает событие и любой другой класс, зарегистрированный как наблюдатель, получает свои данные.

См. эту ссылку для большого ресурса шаблонов: http://sourcemaking.com/design-patterns-and-tips

Код Form1:

namespace PublishSubscribe
{
    public partial class Form1 : Form
    {
        Form2 f2 = new Form2();

        public Form1()
        {
            InitializeComponent();

            f2.PublishData += new PublishDataEventHander( DataReceived );
            f2.Show();
        }

        private void DataReceived( object sender, Form2EventArgs e )
        {
            MessageBox.Show( e.OtherData );            
        }
    }
}

Код Form2

namespace PublishSubscribe
{

    public delegate void PublishDataEventHander( object sender, Form2EventArgs e );

    public partial class Form2 : Form
    {
        public event PublishDataEventHander PublishData;

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click( object sender, EventArgs e )
        {
            PublishData( this, new Form2EventArgs( "data from form2" ) );    
        }
    }

    public class Form2EventArgs : System.EventArgs
    {
        public string OtherData;

        public Form2EventArgs( string OtherData )        
        {
            this.OtherData = OtherData;
        }
    }
}
3
ответ дан 6 December 2019 в 12:56
поделиться

Цепочка шаблона Ответственности реализована в обработке событий DOM. Например, (и упрощение немного), когда на элемент нажимают, тот элемент получает первую возможность обработать событие и затем каждого предка у крачки, пока высокоуровневый документ не достигнут, или один из них явно останавливает событие, "пузырящееся" дальше.

3
ответ дан 6 December 2019 в 12:56
поделиться

Используйте code.google.com

Например, результат поиска для "Фабрики" получит Вас много случаев, где шаблон "фабрика" реализован.

3
ответ дан 6 December 2019 в 12:56
поделиться

Составной объект используется экстенсивно в UI. Компоненты могут быть листовыми компонентами, например, кнопками и маркируют или составляют композит, например, панели, которые могут содержать другой лист или составить компоненты. С точки зрения клиента все компоненты рассматривают то же, которое значительно упрощает клиентский код.

0
ответ дан 6 December 2019 в 12:56
поделиться

Если Вы знакомы с Python, проверяете Скрученную платформу. http://twistedmatrix.com/trac/

1
ответ дан 6 December 2019 в 12:56
поделиться

C#, Java и Python имеют стандартную реализацию шаблона Итератора. В C# и Python это межтерлось на языке, таким образом, можно просто использовать операторы возврата урожая.

1
ответ дан 6 December 2019 в 12:56
поделиться

Я использую пассивное представление, разновидность Образцового шаблона Предъявителя Представления, с любыми веб-формами как разработка (.NET) для увеличения тестируемости/пригодности для обслуживания/и т.д.

Например, Ваш код - позади файла мог бы выглядеть примерно так

Partial Public Class _Default
    Inherits System.Web.UI.Page
    Implements IProductView

    Private presenter As ProductPresenter

    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        MyBase.OnInit(e)
        presenter = New ProductPresenter(Me)
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        presenter.OnViewLoad()
    End Sub

    Private ReadOnly Property PageIsPostBack() As Boolean Implements IProductView.PageIsPostBack
        Get
            Return Page.IsPostBack
        End Get
    End Property

    Public Property Products() As System.Collections.Generic.List(Of Product) Implements Library.IProductView.Products
        Get
            Return DirectCast(gridProducts.DataSource(), List(Of Product))
        End Get
        Set(ByVal value As System.Collections.Generic.List(Of Product))
            gridProducts.DataSource = value
            gridProducts.DataBind()
        End Set
    End Property
End Class

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

Public Class ProductPresenter
    Private mView As IProductView
    Private mProductService As IProductService

    Public Sub New(ByVal View As IProductView)
        Me.New(View, New ProductService())
    End Sub

    Public Sub New(ByVal View As IProductView, ByVal ProductService As IProductService)
        mView = View
        mProductService = ProductService
    End Sub

    Public Sub OnViewLoad()
        If mView.PageIsPostBack = False Then
            PopulateProductsList()
        End If
    End Sub

    Public Sub PopulateProductsList()
        Try
            Dim ProductList As List(Of Product) = mProductService.GetProducts()
            mView.Products = ProductList
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class
3
ответ дан 6 December 2019 в 12:56
поделиться

Шаблонный шаблон является наиболее часто используемым в реализации dotnet событий, чтобы настроить предварительные условия и ответить на постусловия. Вырожденный случай

void FireMyEvent(object sender, EventArgs e) 
{
  if (_myevent != null) _myEvent(sender, e);
}

в котором проверяется предварительное условие. В этом случае предварительное условие - то, что обработчики могут быть вызваны только, когда по крайней мере один был связан. (Не говорите мне, что я должен вызвать обработчики асинхронно. Я знаю это. Я иллюстрирую Шаблонный шаблон, не метод асинхронного программирования.)

Более тщательно продуманное предварительное условие могло бы включить проверку свойства, которое управляет увольнением событий.

Шаблонный шаблон является также наиболее часто используемым для реализации рычагов, например

public virtual void BeforeOpenFile(string filepath)
{
  //stub
}
public virtual void AfterOpenFile(string filepath)
{
  //stub
}
public sealed void OpenFile(string filepath) 
{
  BeforeOpenFile(filepath); //do user customisable pre-open bits
  //do standard bits here
  AfterOpenFile(filepath); //do user customisable post-open bits
}
1
ответ дан 6 December 2019 в 12:56
поделиться

Шаблон "команда" используется везде, у Вас есть функциональность Отмены.

0
ответ дан 6 December 2019 в 12:56
поделиться

Возможно, хорошим примером, как указано в Шаблонах проектирования Head First , также является JAVA Swing API , который реализует Observer шаблон. В частности, JButton (или суперкласс AbstractButton) является классом Observable и предоставляет методы для добавления и удаления «наблюдателей» или «слушателей», как они называются в Swing.

1
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: