Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Java] 디자인패턴 中 생성패턴, 팩토리 메서드(Factory method) 패턴 본문
📌. 디자인 패턴
: 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 설계상의 문제해결방법을 말한다.
: 개발자 사이에서 공유되고, 사용되는 검증된 솔루션이다.
🧩일관성, 🧩유지보수성, 🧩재사용성을 높인다.
: 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 설계상의 문제해결방법을 말한다.
: 개발자 사이에서 공유되고, 사용되는 검증된 솔루션이다.
🧩일관성, 🧩유지보수성, 🧩재사용성을 높인다.
🥥. 생성패턴 in 디자인패턴
:객체 생성과정을 유연하게 다룰 수 있다
배급받는 팩토리 패턴
class 오리 {
private String 종류;
private 비행아이템 a비행아이템;
private 헤엄아이템 a헤엄아이템;
public 오리(String 종류) {
this.종류 = 종류;
}
public void 날다() {
a비행아이템.작동();
}
public void 헤엄치다() {
a헤엄아이템.작동();
}
public void set비행아이템(비행아이템 a비행아이템) {
this.a비행아이템 = a비행아이템;
}
public void set헤엄아이템(헤엄아이템 a헤엄아이템) {
this.a헤엄아이템 = a헤엄아이템;
}
}
interface 아이템 {
void 작동();
}
interface 비행아이템 extends 아이템 {}
class 날개비행아이템 implements 비행아이템 {
@Override
public void 작동() {
System.out.println("날개로 날아갑니다.");
}
}
class 못나는비행아이템 implements 비행아이템 {
@Override
public void 작동() {
System.out.println("날지 못합니다.");
}
}
class 로켓파워비행아이템 implements 비행아이템 {
@Override
public void 작동() {
System.out.println("로켓파워로 날아갑니다.");
}
}
interface 헤엄아이템 extends 아이템 {}
class 물갈퀴헤엄아이템 implements 헤엄아이템 {
@Override
public void 작동() {
System.out.println("물갈퀴로 헤엄칩니다.");
}
}
class 둥둥헤엄아이템 implements 헤엄아이템 {
@Override
public void 작동() {
System.out.println("둥둥 떠다닙니다.");
}
}
class 로켓파워헤엄아이템 implements 헤엄아이템 {
@Override
public void 작동() {
System.out.println("로켓파워로 헤엄칩니다.");
}
}
class 오리공장 {
public static 오리 get(String 종류) {
오리 a오리 = new 오리(종류);
switch(종류) {
case "청둥":
case "흰":
a오리.set비행아이템(new 날개비행아이템());
a오리.set헤엄아이템(new 물갈퀴헤엄아이템());
break;
case "천연고무":
case "합성고무":
a오리.set비행아이템(new 못나는비행아이템());
a오리.set헤엄아이템(new 둥둥헤엄아이템());
break;
case "로봇":
a오리.set비행아이템(new 로켓파워비행아이템());
a오리.set헤엄아이템(new 로켓파워헤엄아이템());
break;
}
return a오리;
}
}
class Main {
public static void main(String[] args) {
오리 a청둥오리 = 오리공장.get("청둥");
오리 a흰오리 = 오리공장.get("흰");
오리 a천연고무오리 = 오리공장.get("천연고무");
오리 a합성고무오리 = 오리공장.get("합성고무");
오리 a로봇오리 = 오리공장.get("로봇");
System.out.println("== 청둥오리 ==");
a청둥오리.날다(); // 날개로 날아갑니다.
a청둥오리.헤엄치다(); // 물갈퀴로 헤엄칩니다.
System.out.println("== 흰오리 ==");
a흰오리.날다(); // 날개로 날아갑니다.
a흰오리.헤엄치다(); // 물갈퀴로 헤엄칩니다.
System.out.println("== 천연고무오리 ==");
a천연고무오리.날다(); // 날지 못합니다.
a천연고무오리.헤엄치다(); // 둥둥 떠다닙니다.
System.out.println("== 합성고무오리 ==");
a합성고무오리.날다(); // 날지 못합니다.
a합성고무오리.헤엄치다(); // 둥둥 떠다닙니다.
System.out.println("== 로봇오리 ==");
a로봇오리.날다(); // 로켓파워로 날아갑니다.
a로봇오리.헤엄치다(); // 로켓파워오 헤엄칩니다.
System.out.println("== 합성고무오리 로켓파워 장착 ==");
a합성고무오리.set비행아이템(new 로켓파워비행아이템());
a합성고무오리.set헤엄아이템(new 로켓파워헤엄아이템());
a합성고무오리.날다(); // 로켓파워로 날아갑니다.
a합성고무오리.헤엄치다(); // 로켓파워로 헤엄칩니다.
}
}
'Backend > 자바' 카테고리의 다른 글
[Java] 자바와 서블릿(Servlet), PHP, JSP (0) | 2022.12.09 |
---|---|
[Java] 미완성과 추상성 (클래스) (0) | 2022.12.07 |
[Java] 옵저버(Observer) 패턴 (0) | 2022.12.03 |
[Java] 컴파일 언어 Java와 JVM (0) | 2022.12.01 |
[Java] 디자인 패턴 中 생성패턴, 싱글톤(Singleton) 패턴 (0) | 2022.11.28 |
Comments