프로그래밍/자바 디자인패턴 22

디자인 패턴 singleton 패턴

singleton 패턴 어떤 클래스의 인스턴스가 반드시 1개만 존재하도록 하고싶을때 인스턴스가 1개밖에 존재하지 않을 것을 프로그램 상에서 표현하고 싶을 때 이 패턴을 씁니다. 코드를 보면서 분석해봅시다. public class Singleton { //클래스변수를 만들어서 딱 하나만 만들게 됩니다. private static Singleton singleton = new Singleton(); //아래와같이 생성자가 private로 두어서 메인에서 생성할 수 없게 합니다. private Singleton(){ System.out.println("인스턴스를 생성했습니다."); } //클래스 메소드로 딱 하나 만든 클래스변수를 반환하게 합니다. public static Singleton getInstanc..

디자인 패턴 Factory Method 패턴

Factory Method 패턴 인스턴스를 만드는 방법은 상위클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지않습니다. 구체적인 내용은 하위 클래스 측에서 수행합니다. 아래 소스를 보면 Factory 클래스는 제품을 구체적으로 어떻게 만드는지는 말하지않고 만들고 제품을 등록한다 이 정도만 정의를 하게됩니다. package framework; public abstract class Factory { //Template Method패턴을 사용함 Factory에서는 Product를 생산하고 public final Product create(String owner){ Product p = createProduct(owner); registerProduct(p); return p; } //아래는 하위클..

디자인 패턴 Template Method 패턴

Template Method패턴 상위클래스에서 어떤 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴입니다. 어렵지않은 패턴이라서 아래 코드들을 분석해보면 쉽게 이해하실수 있을겁니다. public abstract class AbstractDisplay { //추상메소드 3개 public abstract void open(); public abstract void print(); public abstract void close(); //추상메소드를 이용해서 메소드를 구현해둠 //추상메소드는 자식 클래스에서 구체화 될 예정 public final void display(){ open(); for(int i=0; i < 5; i++){ print(); } close(); } } ..

디자인 패턴 위임에 의한 Adapter 패턴(인스턴스를 이용한)

2번째 위임을 사용한 어댑터 패턴(인스턴스를 사용한) 소스를 보면 어떻게 인스턴스를 사용한 것인지 이해가 될 것입니다. public class Banner { private String string; Banner(String string){ this.string = string; } public void showWithParen(){ System.out.println("(" + string + ")"); } public void showWithAster(){ System.out.println("*" + string + "*"); } } public abstract class Print { public abstract void printWeak(); public abstract void printStron..

디자인 패턴 Adapter패턴 상속을 사용한 Adapter패턴

Adapter 패턴 노트북에 사용하는 어댑터처럼 이미 제공된것(ac220볼트) 과 필요한것 (dc 19v)의 차이를 없애주는 패턴방법 1. 클래스에 의한 Adapter 패턴(상속을 사용한 것) 2. 인스턴스에 의한 Adapter패턴(위임을 사용한 것) 첫번째 방법을 사용해 봅시다. 나오는 클래스를 설명하면 제공되고있는 것(ac220) Banner클래스(showWithParen, showWithAster) 어댑터 PrintBanner 클래스 필요한것(dc 19v) Print인터페이스(printWeak, printStrong) public class Banner { private String string; Banner(String string){ this.string = string; } public voi..

디자인패턴 Chain of Responsibility 패턴

책임의 사슬 패턴 핸드폰이 고장나면 일단 구매처에 물어보고 구매처는 as센터로 가라고 하고 as센터에서는 이건 못고친다고 하면서 용산 전문 수리점으로 가라고 한다. 이렇게 책임 떠넘기기를 디자인패턴으로 표현했다. Trouble 클래스 package kch; public class Trouble { //발생한 트러블을 표현하는 클래스 /** * @uml.property name="number" */ private int number;//트러블 번호 public Trouble(int number){ this.number = number;//트러블의 생성 } /** * @return * @uml.property name="number" */ public int getNumber(){ return number;..

디자인 패턴 Visitor 패턴

Visitor 클래스 package kch; public abstract class Visitor { public abstract void visit(File file); public abstract void visit(Directory directory); } Element 인터페이스 package kch; public interface Element {//방문자를 받아들임. public abstract void accept(Visitor v); } Entry 클래스 package kch; import java.util.Iterator; public abstract class Entry implementsElement{ public abstract String getName(); public abstr..

디자인 패턴 Decorator 패턴

처음에는 아래 링크에 들어가셔서 한번 읽어보시면 이 패턴을 이해하는데 아주 도움이 될 것 입니다. http://blog.naver.com/newsdu/80115957298 Display 클래스 package kch; public abstract class Display { public abstract int getColumns();//가로 문자수를 얻는다. public abstract int getRows();//세로 행수를 얻는다. public abstract String getRowText(introw);//row번째의 문자열을 얻는다. public final void show(){//전부 표시한다. for(int i=0 ; i < getRows() ; i++){ System.out.println(g..

디자인 패턴 Composite 패턴

처음에는 아래 링크에 들어가셔서 한번 읽어보시면 이 패턴을 이해하는데 아주 도움이 될 것 입니다. http://blog.naver.com/newsdu/80115957298 Entry 클래스 package kch; /** * @author kch */ public abstract class Entry { /** *@uml.property name="name" */ public abstract String getName(); public abstract int getSize(); publicEntry add(Entry entry) throws FileTreatmentException{ throw new FileTreatmentException(); } public void printList(){ printL..

디자인 패턴 Strategy 패턴

Strategy 인터페이스 package kch; public interface Strategy { public abstract Hand nextHand(); public abstract void study(booleanwin); } WinningStrategy 클래스 package kch; import java.util.Random; public class WinningStrategy implementsStrategy{ //이 클래스는 전판이 이기면 다음에도똑같은 것을 내는 전략을 취함 privateRandom random;//랜덤변수 생성 목적 private boolean won = false;//전판이 이겼는지 졌는지에 대한 필드 private HandprevHand;//전판에 내밀었던 손을 저장함..

반응형