2.構造型モード(3)エージェントモード
詳細
2.構造型モード(3)エージェントモード
1.エージェントモード
2.Javaにおけるエージェントモード
2.構造型モード(3)エージェントモード
(Proxy Pattern) , 。 , 。
:
1. 。
2. 。
3. 。
:
1. , 。
2. , 。
1.エージェントモード
package com.andrew.pattern0203.proxy.model01;
public interface Image {
void display();
}
package com.andrew.pattern0203.proxy.model01;
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName) {
this.fileName = fileName;
loadFromDisk(fileName);
}
@Override
public void display() {
System.out.println("Displaying:" + fileName);
}
private void loadFromDisk(String fileName) {
System.out.println("Loading:" + fileName);
}
}
package com.andrew.pattern0203.proxy.model01;
public class ProxyImage implements Image {
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
@Override
public void display() {
if (null == realImage) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}
package com.andrew.pattern0203.proxy.model01;
/**
* 1.
*
* @author andrew
* @date 2018/07/01
*/
public class Client {
public static void main(String[] args) {
Image image = new ProxyImage("test_img.jpg");
image.display();
System.out.println("");
image.display();
}
}
:
Loading:test_img.jpg
Displaying:test_img.jpg
Displaying:test_img.jpg
2.Javaにおけるエージェントモード
public abstract class Subject{
public abstract void request();
}
public class RealSubject extends Subject{
public void request(){
System.out.println("From real subject.");
}
}
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");
}
}
public class Client{
public static void main(String[] args){
Subject subject = new ProxySubject();
subject.request();
}
}
:
pre request
From real subject.
post request