繝繧カ繧、繝ウ繝代ち繝シ繝ウ Proxyシ壼ソ隕√↓縺ェ縺」縺ヲ縺九i菴懊k
讎りヲ
Proxyシ壻サ」逅莠コ
譛ャ譚・縺ョ蜃ヲ逅繧ェ繝悶ず繧ァ繧ッ繝医→縺ッ蛻・縺ョ莉」逅莠コ繧ェ繝悶ず繧ァ繧ッ繝医↓蜃ヲ逅繧剃サ」逅縺輔○繧区焔豕
雋闕キ縺ョ鬮倥>蜃ヲ逅縺ォ菴ソ逕ィ縺吶k縲
繧ッ繝ゥ繧ケ蝗ウ
譛ャ萓
-シ嗔rivate
繧オ繝シ繝薙せ蛛エ
Subject(荳サ菴)
縲public abstract void setPrinterName(String name);
縲public abstract String getPrinterName();
縲public abstract void print(String name);
}
Proxy(莉」逅莠コ)
縲private String name;
縲private Printer real;
縲public PrintProxy(String name) {
縲縲this.name = name;
縲}
縲@Override
縲public synchronized void setPrinterName(String name) {
縲縲if (this.real != null) {
縲縲縲this.real.setPrinterName(name);
縲縲}
縲}
縲@Override
縲public String getPrinterName() {
縲縲return this.name;
縲}
縲@Override
縲public void print(String string) {
縲縲realize();
縲縲real.print(string);
縲}
縲private void realize() {
縲縲if (this.real == null) {
縲縲縲縺薙%縺ァ蛻昴a縺ヲ譛ャ譚・縺ョ蜃ヲ逅繧ェ繝悶ず繧ァ繧ッ繝医↓蜃ヲ逅繧呈ク。縺
縲縲縲this.real = new Printer(this.name);
縲縲}
縲}
}
RealSubject(螳滄圀縺ョ荳サ菴)
縲private String name;
縲public Printer() {
縲縲heavyJob("Printer縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ菴懈蝉クュ");
縲}
縲public Printer(String name) {
縲縲this.name = name;
縲縲heavyJob(String.format("Printer縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ(%s)菴懈蝉クュ", this.name));
縲}
縲@Override
縲public void setPrinterName(String name) {
縲縲this.name = name;
縲}
縲@Override
縲public String getPrinterName() {
縲縲return this.name;
縲}
縲@Override
縲public void print(String string) {
縲縲System.out.println(String.format("===%s===", this.name));
縲縲System.out.println(string);
縲}
縲private void heavyJob(String string) {
縲縲System.out.println(string);
縲縲for (int i = 0; i < 5; i++) {
縲縲縲try {
縲縲縲縲Thread.sleep(1000);
縲縲縲}catch(InterruptedException e) {
縲縲縲縲// 菴輔b縺励↑縺
縲縲縲}
縲縲縲System.out.println(".");
縲縲}
縲縲System.out.println("螳御コ");
縲}
}
蛻ゥ逕ィ閠蛛エ
縲public static void main(String[] args) {
縲縲Printable p = new PrintProxy("Java");
縲縲System.out.println(String.format("蜷榊燕縺ッ迴セ蝨ィ%s縺ァ縺吶", p.getPrinterName()));
縲縲p.setPrinterName("PHP");
縲縲System.out.println(String.format("蜷榊燕縺ッ迴セ蝨ィ%s縺ァ縺吶", p.getPrinterName()));
縲縲縺薙%縺ァ蛻昴a縺ヲPrinter繧、繝ウ繧ケ繧ソ繝ウ繧ケ縺御ス懈舌&繧後k
縲縲p.print("Hello World.");
縲縲
縲縲p.setPrinterName("PHP");
縲縲p.print("Hello World.");
縲}
}
邨先棡
蜷榊燕縺ッ迴セ蝨ィJava縺ァ縺吶
蜷榊燕縺ッ迴セ蝨ィJava縺ァ縺吶
Printer縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ(Java)菴懈蝉クュ
.
.
.
.
.
螳御コ
===Java===
Hello World.
===PHP===
Hello World.