ここ数日学んだJavaデザインモデル

5908 ワード

この文章は本当に簡単で、自分に書いただけです.
1、単例モード
単例モード、簡単に言えば、1つの動作は単独でしか現れず、1つのクラスは1つのオブジェクトしか作成できません.使用するにはすべてこのオブジェクトが必要です.先生が集まった例は、Windowsのタスクマネージャを開いた後、開いた状態でこのウィンドウを開くしかありません.これはあなたのファイル管理のウィンドウとは違います.ファイル管理では、パスの下のウィンドウを繰り返し開くことができます.これは問題ありません.
newオブジェクトのたびにスタックメモリにメモリが開かれることを知っています.このクラスを直接印刷すると、アドレスが異なることがわかります.これにより、オブジェクトを作成するかどうかを区別できます.
単例モードについては多くの中作成方式がありますが、今日は最も基本的な方式を書きます.この方式はまた2つの方式に分けて作成されています.1つは「餓漢モード」で、もう1つは「怠け者モード」です.彼らの強みは、怠け者の設計方式を採用すれば、メモリの開拓を減らすことです.このオブジェクトを使用する必要がない場合、彼は自分でオブジェクトを作成しませんが....そうですね.このようにスレッドで使用する場合、高同時性の場合、オブジェクトを使用する必要がある前に作成するのか、オブジェクトを使用する必要がある後に作成するのか、本当に後者のようにすればJJになります.餓漢モードは異なり、直接メモリを消費し、安全で、これを明らかにすれば、私たちがいつどれを使うべきかを知ることができます.読めなかったら、大丈夫です.コードが一番はっきりしています.
package com.hejingzhou.single;

public class Single {
	private Single() {//          ,          new   
	}

	//              ,            ,    。
	private static Single single = new Single();//    
	// private static Single single = null;//    

	//                ,               
	public static Single getIntance() {
		// if (single == null) {
		// single = new Single();//    
		// }
		return single;
	}
}
テスト印刷結果:
package com.hejingzhou.single;

public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Single.getIntance());
		System.out.println(Single.getIntance());
	}
}
com.hejingzhou.single.Single@1db9742
com.hejingzhou.single.Single@1db9742
このようにすれば、彼らが取得したオブジェクトを説明するのに十分です.
2、工場モード
ある日あなたのソフトウェアがオンラインになって、ソフトウェアを第三者に渡して使用することを考えてみてください.では、問題が来ました.第三者はどのようにメンテナンスと更新を行いますか.彼らは高級エンジニアを雇ってこのシステムを使うことはありません.だから、あなたのこのソフトウェアシステムは馬鹿にしても操作できるほど簡単に作らなければなりません.これらのものは、設計する前に考慮しなければなりません.もしできるならば、オブジェクトを作成することを列挙して、あなたは第三者に簡単なnewの1つのオブジェクトを譲って、彼はすべて間違いを犯す可能性があって、あるいは何をするか全然知らないで、それではあなたは彼に1つの文字列を入力させて、使うことができて、もっと良いではありませんか.
これは工場モードを使うことができて、ここで挙げた例はただこの理論を学ぶだけで、反射に協力して工場モードを使うともっと完璧で、興味があれば私のこの基礎のJavaの中の反射の基礎知識を見て、コードを見て、この例は第三者が1つの文字列を入力するとこの種類のすべての情報を調べることができて、とても簡単です.
操作対象クラスの親:
package com.hejingzhou.factry;

public class Car {
	
	public Car() {
		super();
	}

	private String brand;
	private int price;

	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public Car(String brand, int price) {
		super();
		this.brand = brand;
		this.price = price;
	}

	void show() {

	}
}
操作クラス:
package com.hejingzhou.factry;

public class Bmw extends Car {
	public Bmw(String brand, int price) {
		super(brand, price);
	}

	public void show() {
		System.out.println("  :" + this.getBrand() + "\t" + "  " + this.getPrice());
	}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.hejingzhou.factry;

public class Mercedes extends Car {
	public Mercedes(String brand, int price) {
		super(brand, price);
	}

	public void show() {
		System.out.println("  :" + this.getBrand() + "\t" + "  " + this.getPrice());
	}
}
工場類:
package com.hejingzhou.factry;

public class Factry {
	public void serach(String brand) {
		if (brand.equals("  ")) {
			new Bmw("  ", 900000).show();
		} else if (brand.equals("  ")) {
			new Mercedes("  ", 1000000).show();
		}
	}
}
テストクラス:
package com.hejingzhou.factry;

public class Test {
	public static void main(String[] args) {
		Factry factry = new Factry();
		//                                
		factry.serach("  ");
		factry.serach("  ");
	}
}
コードを見終わったらよくわかるでしょう.
3、観察者モード
観察者モードとは,その名の通り観察者と被観察者を分離して動作させることである.一対一でもいいし、一対多でもいい.つまり、被観察者が変わったとき、その対象に属するすべての観察者は、被観察者の変化に応じて変化する.これはスターが多くのファンに似ているように、このスターが何かをしたり、何かを変えたりしたとき、彼の脳障害のファンも盲目的に従う.それぞれ千秋、私のここのプログラムの例はある人を挙げて、例えば私が家で食事をしたと言って、息子が聞いて急いで(息子はいませんが)、奥さんが聞いた後、何を急いで、化粧をしてから食べます(奥さんはいませんが)、これは団体で観察者のモードと見ることができます.
通知インタフェースが必要であり、すべての観察者が実現する必要がある.
package com.hejingzhou.weach;

public interface IUpdate {
	void update(String content);
}
息子類と夫人類--観察者です.
package com.hejingzhou.weach;

public class Son implements IUpdate {

	@Override
	public void update(String content) {
		// TODO Auto-generated method stub
		System.out.println("      "+content+"    ");
	}

}
package com.hejingzhou.weach;

public class Wife implements IUpdate {

	@Override
	public void update(String content) {
		// TODO Auto-generated method stub
		System.out.println("      ,    ,     。");
	}

}
私:つまり、その観察者の立場で、私はいくつかの行為を変えて、彼らはすべて行為を変えます.
package com.hejingzhou.weach;

import java.util.ArrayList;

public class Me {
	private ArrayList member = new ArrayList();

	public void addWatcher(IUpdate update) {
		member.add(update);
	}

	public void deleteWatcher(IUpdate update) {
		member.remove(update);

	}

	public void notifyWatcher(String noty) {
		for (IUpdate iUpdate : member) {
			iUpdate.update(noty);
		}
	}

}
テストクラス:
package com.hejingzhou.weach;

public class Test {
	public static void main(String[] args) {
		Me me = new Me();
		IUpdate son = new Son();
		IUpdate wife = new Wife();
		me.addWatcher(son);
		me.addWatcher(wife);
		me.notifyWatcher("    ");
		System.out.println("--------------------------------");
		me.deleteWatcher(wife);//       
		me.notifyWatcher("    ");
	}
}
結果:
              
      ,    ,     。
--------------------------------
              

ええ、簡単ですが、年を取るのが怖いです.