第十七:単例モードとエージェントモード
1899 ワード
一.
静的は静的にしかアクセスできない.単例モード.....クラスごとにインスタンスが1つしかありません
二.
非静的なものは何でもアクセスできます(すなわち、静的なものにも非静的なものにもアクセスできます)
三.
≪プロキシ・モード|Proxy Mode|ldap≫:リアル・ロールをプロキシ・ロールとして使用するプロパティ
1.抽象クラスまたはインタフェースを宣言します(メソッドあり)
2.真の役割に上のインタフェースを継承(実装)させ、自分のビジネスロジックを書く
3.エージェントロールにも上のインタフェースを継承(実装)させ、実際のロールをエージェントロールの属性とし、自分のビジネスロジック(真のロールを実装するビジネス)を書く
4.クライアントクラスでマルチステートを使用して、インタフェースの参照がエージェントロールのインスタンスを指し、エージェントロールを呼び出す方法
静的は静的にしかアクセスできない.単例モード.....クラスごとにインスタンスが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();
}
}