Javaが特定のレベルに深くなると、デザインパターンを理解することで、Javaのインターフェイスまたは抽象的なクラスのアプリケーションをより深く理解することができます。デザインモードは、特定のプログラミングモードに従うことによってのみ、このチュートリアルはJavaのアプリケーションに焦点を当てていますeコマースシステムでは、eコマースの例からオブザーバーの適用を分析したいと思います。
オンラインストアは形式で多様であり、各サイトには一般的な共通性もあります。
具体的には、オンラインストアの製品が名前と価格の観点から変化し、システムがメンバーに自動的に通知できる場合、それは従来の店を区別するオンラインストアの主要な機能になります。これには、オブザーバーの役割を製品製品に追加する必要があります。そのため、製品の詳細が変更されると、オブザーバーはこの変更を自動的に観察し、タイムリーな更新または通知アクションを実行できます。
Java APIは、既製のオブザーバーインターフェイスjava.util.observerも提供します。直接使用する必要があります。
Java.util.observerを実際に使用するには、拡張する必要があります。
1.オブザーバーを追加/削除する方法を提供します。
2。すべてのオブザーバーに通知(Notisfy)メソッドを提供します。
コードコピーは次のとおりです。
//製品クラスは、JSPがUSEBEANを使用してクラスを呼び出すことができます
パブリッククラスの製品は観察可能な拡張{
プライベート文字列名;
プライベートフロート価格。
public string getname(){return name;}
public void setName(){
this.name = name;
//変更点を設定しましたsetChanged();
notifyobservers(name);
}
public float getPrice(){return price;}
public void setPrice(){
this.price = price;
//変更点を設定しましたsetChanged();
notifyobservers(new Float(価格));
}
//以下は、データベース更新挿入コマンドにすることができます。
public void savetodb(){
.............
}
}
製品クラスのsetxxxメソッドでは、jspフォームがsetxxxを呼び出す場合、notisfyobserversメソッドが実際にトリガーされることに気付きました。
これらのオブザーバーのコードを見てみましょう。
コードコピーは次のとおりです。
// Observer NameObserverは、主に製品名(名前)を観察するために使用されます。
パブリッククラスのnameobserverはオブザーバーを実装しています{
プライベート文字列名= null;
public voidアップデート(Observable obj、object arg){
if(arg instanceof string){
name =(string)arg;
//製品名の変更値はname system.out.println( "nameobserver:name change to"+name)にあります。
}
}
}
// Observer Priseobserverは、主に製品価格を観察するために使用されます。
パブリッククラスのプライスオーバーサーバーはオブザーバーを実装しています{
プライベートフロート価格= 0;
public voidアップデート(Observable obj、object arg){
if(arg instanceof float){
価格=((float)arg).floatvalue();
System.out.println( "Prichobserver:"+価格への価格変更);
}
}
}
JSPでは、このオブザーバープログラムを正式に実行できます。
コードコピーは次のとおりです。
<jsp:usebean id = "product" scope = "session" />
<JSP:SetProperty name = "Product" Property = "*" />
<jsp:usebean id = "nameobs" scope = "session" />
<JSP:SetProperty name = "Product" Property = "*" />
<jsp:usebean id = "pristobs" scope = "session" />
<JSP:SetProperty name = "Product" Property = "*" />
<%
if(request.getParameter( "save")!= null)
{
product.savetodb();
out.println( "製品データの変更が保存され、顧客が自動的に通知されました");
}それ以外{
// observer procust.addobserver(nameobs)に追加します。
Product.AddobServer(Prishsobs);
%>
//REQUEST.GETREQUESTURI()は、このJSPを生成するプログラム名です。
<入力タイプ=非表示name = "save" value = "1">
製品名:<入力タイプ=テキスト名= "name">
製品価格:<入力タイプ=テキスト名= "価格">
<入力タイプ=送信>
</form>
<%
}
%>
JSPプログラムを実行すると、フォームエントリインターフェイスが表示されます。 JSPの。
ここでは、Javabeansの自動割り当て概念が使用されているため、実際のプログラムはSetName SetPriceステートメントを自動的に実行します。サーバーコンソールに次の情報があります。
コードコピーは次のとおりです。
nameobserver:名前の変更?????
PriseObserver:価格の変化???(JSPフォームに入力された製品価格);
これは、オブザーバーがすでに行動していることを示しています。
同時に、JSPを実行するブラウザに関する情報を取得します。
1。製品の変更を保存し、顧客に自動的に通知します
上記の記事はJSPの概念を使用しているため、多くの自動アクションを意味します。
コードコピーは次のとおりです。
パブリッククラステスト{
public static void main(string args []){
製品製品=新製品();
nameobserver nameobs = new nameobserver();
PriseObServer Prishsobs = new Pristobserver();
// observer procust.addobserver(nameobs)に追加します。
Product.AddobServer(Prishsobs);
Product.setName( "Orange is Red");
Product.SetPrice(9.22F);
}
}
次の情報が見つかります。
nameobserver:オレンジへの名前の変更は赤です
Priseobserver:価格の変化は9.22に変化します
これは、オブザーバーが演技していることを示しています。