디자인 패턴 ~ Prototype ~
16972 단어 객체 지향디자인 패턴신인 프로그래머 응원uml자바
1. 소개
GoF의 디자인 패턴에서 Prototype 패턴을 요약합니다.
2. Prototype 패턴이란?
3. 샘플 클래스 다이어그램
4. 샘플 프로그램
입력한 문자열에 밑줄을 긋거나 둘러싸는 프로그램입니다.
4-1. Product 인터페이스
복제 메소드를 정의하는 인터페이스입니다. java의 Cloneable 인터페이스를 상속합니다.
Product.java
package framework;
import java.lang.Cloneable;
public interface Product extends Cloneable {
public abstract void use(String s);
public abstract Product createClone();
}
4-2. Manager 클래스
Product의 작성 지시나 관리를 실시하는 클래스입니다.
Manager.java
package framework;
import java.util.HashMap;
public class Manager {
private HashMap showcase = new HashMap();
public void register(String name, Product proto) {
showcase.put(name, proto);
}
public Product create(String protoname) {
Product p = (Product)showcase.get(protoname);
return p.createClone();
}
}
4-3. UnderlinePen 클래스
Product 인터페이스를 구현하는 클래스입니다. 당 클래스는 「문자에 밑줄을 긋는」클래스가 됩니다.
UnderlinePen.java
import framework.Product;
public class UnderlinePen implements Product {
private char ulchar;
public UnderlinePen(char ulchar) {
this.ulchar = ulchar;
}
public void use(String s) {
int length = s.getBytes().length;
System.out.println(s);
for (int i = 0; i < length; i++) {
System.out.print(ulchar);
}
System.out.println("");
}
public Product createClone() {
Product p = null;
try {
p = (Product)clone();
} catch (CloneNotSupportedException e) {
// オブジェクトのクラスがCloneableインタフェースを実装していない場合にスローされる例外
e.printStackTrace();
}
return p;
}
}
4-4. MessageBox 클래스
Product 인터페이스를 구현하는 클래스입니다. 당 클래스는 「문자를 둘러싸는」클래스가 됩니다.
MessageBox.java
import framework.Product;
public class MessageBox implements Product {
private char decochar;
public MessageBox(char decochar) {
this.decochar = decochar;
}
public void use(String s) {
int length = s.getBytes().length;
for (int i = 0; i < length + 2; i++) {
System.out.print(decochar);
}
System.out.println("");
System.out.println(decochar + s + decochar);
for (int i = 0; i < length + 2; i++) {
System.out.print(decochar);
}
System.out.println("");
}
public Product createClone() {
Product p = null;
try {
p = (Product)clone();
} catch (CloneNotSupportedException e) {
// オブジェクトのクラスがCloneableインタフェースを実装していない場合にスローされる例外
e.printStackTrace();
}
return p;
}
}
4-5. Main 클래스
메인 처리를 실시하는 클래스입니다.
Main.java
import framework.Manager;
import framework.Product;
public class Main {
public static void main(String[] args) {
Manager manager = new Manager();
UnderlinePen upen = new UnderlinePen('~');
MessageBox mbox = new MessageBox('*');
MessageBox pbox = new MessageBox('+');
manager.register("strong message", upen);
manager.register("warning box", mbox);
manager.register("slash box", pbox);
Product p1 = manager.create("strong message");
p1.use("Hello world");
Product p2 = manager.create("warning box");
p2.use("Hello world");
Product p3 = manager.create("slash box");
p3.use("Hello world");
}
}
4-6. 실행 결과
Hello World
===========
*************
*Hello World*
*************
+++++++++++++
+Hello World+
+++++++++++++
5. 장점
샘플 프로그램에서는 비교적 단순한 경우였지만, 인스턴스를 생성하는데 있어서 복잡한 처리가 필요하거나 시간이 걸리는 처리가 필요할 수도 있습니다. 인스턴스를 생성할 때마다 new xxx()로서는 매우 비효율적입니다.
Prototype(제형)을 만들어 두고 복사하는 것만으로 간단하게 인스턴스를 생성할 수 있습니다.
6. GitHub
7. 디자인 패턴 목록
8. 참고
이번 기사 및 샘플 프로그램은 이하의 서적을 바탕으로 작성하였습니다.
매우 이해하기 쉽고 공부가되었습니다. 감사합니다.
디자인 패턴이나 샘플 프로그램에 대한 설명이 상세하게 쓰여져 있으므로, 꼭 서적의 분도 봐 주세요.
Reference
이 문제에 관하여(디자인 패턴 ~ Prototype ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/i-tanaka730/items/c0177e17c9df5f379925텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)