Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Strategy pattern - Teknopedia
Strategy pattern - Teknopedia
Abbozzo
Questa voce sull'argomento programmazione è solo un abbozzo.
Contribuisci a migliorarla secondo le convenzioni di Teknopedia.

Nella programmazione ad oggetti, lo strategy pattern è uno dei pattern fondamentali, definiti originariamente dalla Gang of Four.

L'obiettivo di questa architettura è isolare un algoritmo all'interno di un oggetto, in maniera tale da risultare utile in quelle situazioni dove sia necessario modificare dinamicamente gli algoritmi utilizzati da un'applicazione. Si pensi ad esempio alle possibili visite in una struttura ad albero (visita anticipata, simmetrica, posticipata); mediante il pattern strategy è possibile selezionare a tempo di esecuzione una tra le visite ed eseguirla sull'albero per ottenere il risultato voluto. Anche il design pattern Iterator si basa su questo concetto di isolamento.

Questo pattern prevede che gli algoritmi siano intercambiabili tra loro, in base ad una specificata condizione, in modalità trasparente al client che ne fa uso. In altre parole, data una famiglia di algoritmi che implementa una certa funzionalità, come può essere ad esempio un algoritmo di visita oppure di ordinamento, essa dovrà esportare sempre la medesima interfaccia, così il client dell'algoritmo non dovrà fare nessuna assunzione su quale sia la strategia istanziata in un particolare istante.

Struttura

[modifica | modifica wikitesto]
Struttura del Design Pattern Strategy
Struttura del Design Pattern Strategy

Esempio

[modifica | modifica wikitesto]

L'esempio seguente è stato codificato con il linguaggio di programmazione Java.

    // "Strategy"
    public interface ISortStrategy
    {
       public void sort(List<Document> documentList);
    }

   // "classe concreta Strategy" 
   public  class QuickDocumentSort implements ISortStrategy
    {
        public void sort(List<Document> documentList)
        {
            // Call overloaded Sort
            sortQuickSort(documentList);
           
        }

        // Ordina usando l'algoritmo del quickSort
        private void sortQuickSort(List<Document> list)
        {
            //Ordina i documenti usando l'algoritmo del quicksort
            Collection.quickSort(list,left,right);
        }
    }

    // "classe concreta Strategy" 
   public  class MergeDocumentSort implements ISortStrategy
    {
        public void sort(List<Document> documentList)
        {
            // Call overloaded Sort
            sortMergeSort(documentList);
           
        }

        // Ordina usando l'algoritmo del mergeSort
        private void sortMergeSort(List<Document> list)
        {
            //Ordina i documenti usando l'algoritmo del mergeSort
            Collection.mergeSort(list,left,right);
        }
    }

    //Contesto in cui viene usato il pattern strategy. Abbiamo una lista di documenti che deve essere ordinata.
    public class SortedDocumentList
    {
        //Lista di documenti
        private List<Document> documentList = new List<Document>();
        //Algoritmo per l'ordinamento dei documenti
        private ISortStrategy sortStrategy;

        public SortedDocumentList( List<Document> documents ){
            this.documentList = documents;
        }
        
        public void setSortStrategy(ISortStrategy sortStrategy)
        {
            this.sortStrategy = sortStrategy;
        }

        public void add(Document document)
        {
            documentList.add(document);
        }

        //Ordina la lista di documenti usando un algoritmo di ordinamento
        public void sort()
        {
            //Ordina i documenti
            sortStrategy.sort(documentList);

            // Display results
            for (Document document: documentList )
            {
               System.out.println(document.getTitle());
            }
        }
    }

    class Document
    {
        private String title;
        private String code;

        public Document(String title, String code)
        {
            this.title = title;
            this.code = code;
        }
        public String getTitle()
        {
            return title;
        }
        public void setCode(String code)
        {
            this.code = code;
        }
    }

Utilizzo dello Strategy: nel seguente esempio vediamo come ordinare una lista di documenti con due diversi algoritmi di ordinamento senza che la classe che si occupa di ordinare i documenti conosca l'implementazione dell'algoritmo di ordinamento.

public class SortDocument {

    public void sort(List<Document> documents) {
        QuickDocumentSort quickDocumentSort = new QuickdocumentSort();
        
        SortedDocumentList sortedDocumentList = new SortedDocumentList(documents);
    
        //Aggiungi l'algoritmo per effettuare l'ordinamento
        sortedDocumentList.setSortStrategy(quickDocumentSort);
    
        //Ordina i documenti usando l'algoritmo quickDocumentSort
        sortedDocumentList.sort();
    
        MergeDocumentSort mergeDocumentSort = new MergeDocumentSort();
    
        sortedDocumentList.setSortStrategy(mergeDocumentSort);
    
        //Ordina di nuovo la lista usando un altro algoritmo di ordinamento
         sortedDocumentList.sort();
    }
}

Considerazioni

[modifica | modifica wikitesto]
Sezione vuotaQuesta sezione sull'argomento informatica è ancora vuota. Aiutaci a scriverla!

Bibliografia

[modifica | modifica wikitesto]
  • Gamma, E., Helm, R., Johnson, R. e Vlissides, J., Design Patterns: elementi per il riuso di software a oggetti, Addison Wesley, 1995, ISBN 88-7192-150-X
    • Originale: Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley, 1995, ISBN 0-201-63361-2

Voci correlate

[modifica | modifica wikitesto]
  • Decorator
  • Command pattern
  • Factory method

Altri progetti

[modifica | modifica wikitesto]

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file sullo Strategy pattern
V · D · M
Design pattern
CreazionaliAbstract factory · Builder · Factory · Prototype · Singleton
StrutturaliAdapter · Bridge · Composite · Container pattern · Decorator · Façade · Flyweight · Proxy
ComportamentaliChain-of-responsibility · Command · Interpreter · Iterator · Mediator · Memento · Observer · State · Strategy · Template method · Visitor
Pattern di concorrenzaActive object · Balking · Binding properties · Double-checked locking · Event-based asynchronous · Guarded suspension · Join · Lock · Monitor · Proactor · Reactor · Read write lock · Scheduler · Thread pool · Thread-local storage
Pattern architetturaliFront controller · Interceptor · MVC · n-tier · Specification · Publish–subscribe · Naked objects · Service locator · Active record · Identity map · Data Access Object · Data transfer object · ADR · Inversione del controllo
Altri
pattern
Blackboard · Business delegate · Composite entity · Dependency injection · Intercepting filter · Lazy loading · Mock object · Null object · Object pool · Servant · Twin · Type tunnel
LibriDesign Patterns · Enterprise Integration Patterns
PersoneChristopher Alexander · Erich Gamma · Ralph Johnson · John Vlissides · Grady Booch · Kent Beck · Ward Cunningham · Martin Fowler · Robert Martin · Jim Coplien · Douglas Schmidt · Linda Rising
ComunitàThe Hillside Group · The Portland Pattern Repository
  Portale Informatica: accedi alle voci di Teknopedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Strategy_pattern&oldid=138805184"

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022