第十七:単例モードとエージェントモード

1899 ワード

一.
静的は静的にしかアクセスできない.単例モード.....クラスごとにインスタンスが1つしかありません
/**
 *  : 
 * */
public class Singleton {
	private static Singleton singleton=new Singleton();
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return singleton;
	}
}
/**
 *  : 
 * */
public class Singleton2 {
	private static Singleton2 singleton2;
	
	private Singleton2(){
		
	}
	
	public static Singleton2 getInstance(){
		if(null==singleton2){// 
			singleton2=new Singleton2();
		}
		return singleton2;
	}
}

二.
非静的なものは何でもアクセスできます(すなわち、静的なものにも非静的なものにもアクセスできます)
三.
≪プロキシ・モード|Proxy Mode|ldap≫:リアル・ロールをプロキシ・ロールとして使用するプロパティ
1.抽象クラスまたはインタフェースを宣言します(メソッドあり)
/**
 *  。 : 
 * */
public abstract class Subject {
	public abstract void request();
}

2.真の役割に上のインタフェースを継承(実装)させ、自分のビジネスロジックを書く
/**
 *  。 
 * */
public class RealSubject extends Subject {
	public void request() {
		System.out.println("From real subject");
	}

}

3.エージェントロールにも上のインタフェースを継承(実装)させ、実際のロールをエージェントロールの属性とし、自分のビジネスロジック(真のロールを実装するビジネス)を書く
/**
 *  : 
 * */
public class ProxySubject extends Subject {
	/**
	 *  
	 * */
	private RealSubject realSubject ;
	
	public void request() {
		this.preRequest();
		
		if(null==realSubject){
			realSubject=new RealSubject();
		}
		realSubject.request();// 
		this.postRequest();
	}

	private void preRequest(){
		System.out.println("pre request");
	}
	
	private void postRequest(){
		System.out.println("post request");
	}
}

4.クライアントクラスでマルチステートを使用して、インタフェースの参照がエージェントロールのインスタンスを指し、エージェントロールを呼び出す方法
/**
 *  
 * */
public class Client {
	public static void main(String[] args) {
		Subject subject=new ProxySubject();
		subject.request();
	}
}