ホームページ > 类库下载 > java类库 > スプリングと戦略パターン

スプリングと戦略パターン

阿神
リリース: 2016-11-07 17:45:48
オリジナル
2024 人が閲覧しました

1: 戦略パターンの定義

戦略パターンはアルゴリズムのパッケージ化であり、アルゴリズムを使用する責任をアルゴリズム自体から分離し、別のオブジェクト管理に委任します。戦略パターンは通常、一連のアルゴリズムを抽象戦略クラスのサブクラスとして一連の戦略クラスにパッケージ化します。

クラス図は次のとおりです:

スプリングと戦略パターン

戦略パターンが JAVA クラスを使用して実装される場合、ソース コードは次のとおりです:

Java コード

/** 
 * 
 * 策略执行 
 * @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();  
    }  
}
ログイン後にコピー

戦略インターフェイス:

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();  
}
ログイン後にコピー

実装クラス 1:

Java コード

package com.proxy.strategy.impl;  
   
import com.proxy.strategy.Strategy;  
   
public class PrintStrategy implements Strategy {  
   
    public void testStrategy() {  
        System.out.print("我要打印!!");  
    }  
   
}
ログイン後にコピー

実装カテゴリ 2:

Java コード

package com.proxy.strategy.impl;  
   
import com.proxy.strategy.Strategy;  
   
public class WriteStrategy implements Strategy {  
   
    public void testStrategy() {  
        System.out.println("我要写字!!!");  
    }  
   
}
ログイン後にコピー

実行コード:

Java コード

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 を使用したシステムはたくさんありますが、Spring モードで戦略を実装するにはどうすればよいでしょうか?

Spring の中核の 1 つは IOC であるため、実際には少し変更するだけで済みます。

最初に Contex クラスを変更します:

Java コード

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();  
    }  
}
ログイン後にコピー

次にそれを Spring 構成ファイルで構成します、

Xml コード

<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"/>
ログイン後にコピー

注入する実装クラスを選択し、これを実行コード:

Java コード

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();  
    }  
}
ログイン後にコピー

ほら、このようにして春が導入されます。

しかし、これには長所と短所があります。たとえば、契約書は印刷する必要がありますが、ラブレターは手書きする必要があります。契約がタイプ 2、ラブレターがタイプ 1 であると仮定すると、どのように自動的に適応するのでしょうか?

3: Spring Strategy モードの上級バージョン

まず Context クラスを変更します:

Java コード

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();  
    }  
}
ログイン後にコピー

次に Spring 構成ファイルを変更します:

Xml コード

<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>
ログイン後にコピー

実行されたエントリ クラスの変更対象:

Java コード

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);  
    }  
}
ログイン後にコピー

次に、それを実行して結果がどうなるか見てみましょう。

スプリングと戦略パターン

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート