スプリングと戦略パターン
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); } }
次に、それを実行して結果がどうなるか見てみましょう。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用する; 5. トランザクション マネージャーをカスタマイズする。

Java によるスケジュールされたタスクの実装 Jdk に付属のライブラリでは、スケジュールされたタスクを実装する 2 つの方法があります。1 つは Timer で、もう 1 つは ScheduledThreadPoolExecutor です。 Timer+TimerTask が Timer を作成すると、TimerTask タスクのスケジュールに使用できるスレッドが作成されます。Timer には 4 つの構築メソッドがあり、Timer スレッドの名前と、それをデーモン スレッドとして設定するかどうかを指定できます。デフォルト名は Timer-number で、デフォルトはデーモン スレッドではありません。主なメソッドは 3 つあります。 cancel(): タスクのスケジュールを終了し、現在スケジュールされているすべてのタスクをキャンセルします。実行中のタスクは影響を受けません。 purge(): タスク キューからタスクを削除します。

SpringBoot と SpringCloud は両方とも、開発者がマイクロサービス アプリケーションをより迅速に構築およびデプロイできるようにする Spring Framework の拡張機能ですが、それぞれ異なる目的と機能を持っています。 SpringBoot は、Java アプリケーションを迅速に構築するためのフレームワークであり、開発者は Spring ベースのアプリケーションをより迅速に作成してデプロイできるようになります。スタンドアロンの実行可能な Spring アプリケーションを構築するための、シンプルでわかりやすい方法を提供します。

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

テクノロジーの更新と反復により、Java5.0 はアノテーションをサポートし始めました。 Java の主要なフレームワークである Spring は、バージョン 2.5 に更新されて以来、徐々に XML 構成を放棄し始めており、Spring フレームワークを制御するために使用されるアノテーションが増えています。

Java 開発者として、Spring フレームワークを学習して使用することは必須のスキルです。クラウド コンピューティングとマイクロサービスの人気に伴い、Spring Cloud の学習と使用も習得しなければならないスキルになりました。 SpringCloud は、分散システムを迅速に構築するための SpringBoot に基づく開発ツールセットです。サービスの登録と検出、構成センター、負荷分散、サーキット ブレーカーなどの一連のコンポーネントを開発者に提供し、開発者がマイクロ サービスを構築できるようにします。
