Heim  >  Artikel  >  类库下载  >  Frühlings- und Strategiemuster

Frühlings- und Strategiemuster

阿神
阿神Original
2016-11-07 17:45:482015Durchsuche

1: Definition des Strategiemusters

Strategiemuster ist eine Verpackung des Algorithmus, die die Verantwortung für die Verwendung des Algorithmus vom Algorithmus selbst trennt und sie an eine andere Objektverwaltung delegiert. Das Strategiemuster packt normalerweise eine Reihe von Algorithmen in eine Reihe von Strategieklassen als Unterklasse einer abstrakten Strategieklasse.

Das Klassendiagramm lautet wie folgt:

Frühlings- und Strategiemuster

Wenn das Strategiemuster mithilfe von JAVA-Klassen implementiert werden soll, lautet der Quellcode wie folgt:

Java-Code

/** 
 * 
 * 策略执行 
 * @author weique.lqf 
 * @version $Id: Context.java, v 0.1 2014-2-9 下午2:32:56 weique.lqf Exp $ 
 */  
public class Context {  
    private Strategy stg;  
   
    public Context(Strategy theStg) {  
        this.stg = theStg;  
    }  
   
    public void doAction() {  
        this.stg.testStrategy();  
    }  
}

Strategieschnittstelle:

Java代码  
/** 
 * 
 * 
 * @author weique.lqf 
 * @version $Id: Strategy.java, v 0.1 2014-2-9 下午2:32:17 weique.lqf Exp $ 
 */  
public interface Strategy {  
   
    void testStrategy();  
}

Implementierungsklasse eins:

Java-Code

package com.proxy.strategy.impl;  
   
import com.proxy.strategy.Strategy;  
   
public class PrintStrategy implements Strategy {  
   
    public void testStrategy() {  
        System.out.print("我要打印!!");  
    }  
   
}

Implementierungsklasse zwei:

Java-Code

package com.proxy.strategy.impl;  
   
import com.proxy.strategy.Strategy;  
   
public class WriteStrategy implements Strategy {  
   
    public void testStrategy() {  
        System.out.println("我要写字!!!");  
    }  
   
}

Ausführungscode:

Java-Code

package com.proxy.strategy;  
   
import com.proxy.strategy.impl.PrintStrategy;  
   
public class StrategyClient {  
   
    public static void main(String[] args) {  
        Strategy stgA = new PrintStrategy();  
        Context ct = new Context(stgA);  
        ct.doAction();  
    }  
}

2: Spring-Implementierungsstrategiemodus

Es gibt mittlerweile so viele Systeme, die Spring verwenden, also wie man eine Strategie implementiert im Frühlingsmodus Wollstoff?

Tatsächlich bedarf es nur einer kleinen Änderung, denn einer der Kerne des Frühlings ist IOC.

Ändern Sie zuerst die Contex-Klasse:

Java-Code

package com.proxy.strategy;  
public class ContextSpring {  
    private Strategy stg;  
   
    /** 
     * Setter method for property <tt>stg</tt>. 
     * 
     * @param stg value to be assigned to property stg 
     */  
    public void setStg(Strategy stg) {  
        this.stg = stg;  
    }  
   
    public void doAction() {  
        this.stg.testStrategy();  
    }  
}

Konfigurieren Sie ihn dann in der Spring-Konfigurationsdatei

Xml-Code

<bean id="ct" class = "com.proxy.strategy.ContextSpring">  
      <property name="stg" ref="writeStg"/>  
   </bean>  
   <bean id="writeStg" class = "com.proxy.strategy.impl.WriteStrategy"/>  
   <bean id="printStg" class = "com.proxy.strategy.impl.PrintStrategy"/>

Wählen Sie die Implementierungsklasse aus, die Sie einfügen möchten, und schreiben Sie dies dann in den ausgeführten Code:

Java-Code

package com.proxy.strategy;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
   
public class StrategySpringClient {  
   
    public static void main(String[] args) {  
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");  
        ContextSpring ct = (ContextSpring) context.getBean("ct");  
        ct.doAction();  
    }  
}

Sehen Sie, auf diese Weise wird der Frühling eingeläutet.

Aber das hat Vor- und Nachteile, wenn ich mich beispielsweise nach verschiedenen Arten bewerben möchte: Verträge müssen ausgedruckt werden, während Liebesbriefe handschriftlich sein müssen. Angenommen, der Vertrag ist Typ 2 und der Liebesbrief ist Typ 1. Wie passen wir uns dann automatisch an?

Drei: Erweiterte Version des Frühlingsstrategiemodus

Ändern Sie zunächst die Kontextklasse:

Java-Code

package com.proxy.strategy;  
import java.util.HashMap;  
import java.util.Map;    
/** 
 * 
 * 
 * @author weique.lqf 
 * @version $Id: ContextSpringFactory.java, v 0.1 2014-2-9 下午3:46:09 weique.lqf Exp $ 
 */  
public class ContextSpringFactory {  
    private Map<String, Strategy> stgMap = new HashMap<String, Strategy>();  
    /** 
     * Getter method for property <tt>stgMap</tt>. 
     * 
     * @return property value of stgMap 
     */  
    public Map<String, Strategy> getStgMap() {  
        return stgMap;  
    }  
    /** 
     * Setter method for property <tt>stgMap</tt>. 
     * 
     * @param stgMap value to be assigned to property stgMap 
     */  
    public void setStgMap(Map<String, Strategy> stgMap) {  
        this.stgMap = stgMap;  
    }  
    public void doAction(String strType) {  
        this.stgMap.get(strType).testStrategy();  
    }  
}

Ändern Sie dann die Federkonfigurationsdatei:

Xml-Code

<bean id="ctf" class = "com.proxy.strategy.ContextSpringFactory">  
      <property name="stgMap">   
         <map>   
              <entry key="1" value-ref="writeStg"/>   
              <entry key="2" value-ref="printStg"/>    
         </map>   
      </property>   
   </bean>

Die ausgeführte Eintragsklasse wird geändert in:

Java-Code

package com.proxy.strategy;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
public class StrategySpringClientFactory {  
    public static void main(String[] args) {  
        //外部参数  
        String type = "1";  
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");  
        ContextSpringFactory ctf = (ContextSpringFactory) context.getBean("ctf");  
        ctf.doAction(type);  
        //type 2  
        type = "2";  
        ctf.doAction(type);  
    }  
}

Dann führen Sie ihn aus und sehen, was die Ergebnisse sein werden?

Frühlings- und Strategiemuster

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn