์ถ์ ํฉํ ๋ฆฌ ํจํด (Abstract Factory Pattern)
๊ด๋ จ๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ํจ๋ฐ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์์ฑ ํจํด์
๋๋ค. ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ์ง์ ํ์ง ์๊ณ ๋ ์ฐ๊ด๋๊ฑฐ๋ ์์กด์ ์ธ ๊ฐ์ฒด๋ค์ ๊ทธ๋ฃน์ ์์ฑํ ์ ์๊ฒ ํด์ค๋๋ค.
์ฃผ์ ๋ชฉ์
โข
์ฐ๊ด๋ ๊ฐ์ฒด๋ค์ ์ผ๊ด๋ ์์ฑ์ ๋ณด์ฅ
โข
๊ฐ์ฒด ์์ฑ ๋ก์ง๊ณผ ์ฌ์ฉ ๋ก์ง์ ๋ถ๋ฆฌ
โข
์ ํ๊ตฐ ๊ต์ฒด์ ์ฉ์ด์ฑ ์ ๊ณต
ํน์ง
โข
๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ์์กดํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ์ฒด ์์ฑ
โข
๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ด ํจ๊ป ๋์ํ๋๋ก ๋ณด์ฅ
โข
์๋ก์ด ์ ํ๊ตฐ ์ถ๊ฐ๊ฐ ์ฉ์ดํจ
์์ ์ฝ๋
// Abstract Factory
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
// Concrete Factories
class WindowsFactory implements GUIFactory {
public Button createButton() {
return new WindowsButton();
}
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
class MacFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
public Checkbox createCheckbox() {
return new MacCheckbox();
}
}
Java
๋ณต์ฌ
์ฝ๋ ์ค๋ช
์ ์ฝ๋๋ ์ด์์ฒด์ ๋ณ GUI ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์์์
๋๋ค.
โข
GUIFactory ์ธํฐํ์ด์ค: ๋ฒํผ๊ณผ ์ฒดํฌ๋ฐ์ค๋ฅผ ์์ฑํ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค.
โข
WindowsFactory: Windows ์คํ์ผ์ GUI ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ์
๋๋ค.
โฆ
WindowsButton๊ณผ WindowsCheckbox ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
โข
MacFactory: Mac ์คํ์ผ์ GUI ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ์
๋๋ค.
โฆ
MacButton๊ณผ MacCheckbox ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ ํด๋์ค๋ง ์ ํํ๋ฉด ๋๊ณ , ํด๋น ์ด์์ฒด์ ์ ๋ง๋ ๋ชจ๋ GUI ์ปดํฌ๋ํธ๋ค์ด ์ผ๊ด๋๊ฒ ์์ฑ๋ฉ๋๋ค.