Come si chiama questo modello di progettazione? [chiuso]

0

Ho un po 'di codice:

/// <summary>
/// Represents Record Locator class
/// </summary>
public class RecordLocator : IRecordLocator
{
    /// <summary>
    /// The Record Locator string, for example: ZT8C4O
    /// </summary>
    public string Name { get; private set; }

    /// <summary>
    /// Initializes a new instance of the <see cref="RecordLocator"/> class.
    /// </summary>
    /// <param name="recordLocator">The record locator string.</param>
    private RecordLocator(string recordLocator)
    {
        Name = recordLocator;
    }

    /// <summary>
    /// Parses the specified record locator.
    /// </summary>
    /// <param name="recordLocator">The record locator string.</param>
    /// <returns></returns>
    public static IRecordLocator Parse(string recordLocator)
    {
        if (string.IsNullOrEmpty(recordLocator))
        throw new ArgumentNullException("recordLocator");

        if (recordLocator.Length != 6)
        throw new ArgumentException("recordLocator.Length != 6");

        return new RecordLocator(recordLocator);
    }
}

/// <summary>
/// Represents Record Locator interface
/// </summary>
public interface IRecordLocator : IHideObjectMembers
{
    /// <summary>
    /// The Record Locator string, for example: ZT8C4O
    /// </summary>
    string Name { get; }
}
  1. Come si chiama questo modello di progettazione? Quando hai una classe, che si istanzia da sola (e probabilmente ha un costruttore privato)? Un altro esempio è la classe System.DateTime di .NET framework.

  2. È corretto farlo in quel modo?

posta Alexanderius 13.02.2014 - 14:58
fonte

4 risposte

10

È un modello di fabbrica statico . In questa particolare istanza non fornisce attualmente nulla che un costruttore tradizionale non possa (IE object pooling o più tipi di implementazione), quindi non aggiunge molto valore, ma non è sbagliato.

    
risposta data 13.02.2014 - 15:20
fonte
1

Oltre alla "fabbrica statica" (vedi la risposta di Sign), ho anche sentito il termine "metodo di creazione". I metodi di creazione hanno il vantaggio di avere un nome specifico che trasmette il significato . Puoi anche creare diversi metodi con la stessa firma di parametro, ad es. una struttura Angle con metodi static Angle FromDegrees(double degrees) e FromRadians(double radians) . Questo non è possibile con i costruttori.

    
risposta data 13.02.2014 - 15:52
fonte
0

Non riesco a riconoscere alcun modello di design stabilito qui. Tuttavia, l'analisi di una stringa per costruire un oggetto è buona, ho visto molti esempi in Java (la mia lingua principale) come Integer.parseInt .

Non puoi avere un costruttore per analizzare le stringhe perché se l'analisi fallisce, devi lanciare un'eccezione (costosa) o mantenere un oggetto in uno stato indefinito (cattivo). Il metodo di analisi può generare un nuovo oggetto o restituire null.

    
risposta data 13.02.2014 - 15:13
fonte
-3

Nessun modello di questo tipo esiste nel libro GoF. Né ho sentito parlare di questo tipo di schema.

Sì, è OK farlo. Ma attenzione, perché limita l'estensibilità.

    
risposta data 13.02.2014 - 15:13
fonte

Leggi altre domande sui tag