[Design pattern] Abstract Factory Methods ๐, (Creational patterns)
Overview
Abstract Factory Pattern ๐
ย ย ์ฐ๊ด๋ ์๋ธ ํด๋์ค๋ฅผ ํน์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ํ ๋ฒ์ ๊ต์ฒด ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋์์ธ ํจํด Factory method์ ํ์ฅ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
Class Diagram
Example Code ๐
package abstractfactory;
public interface MachineA {
public void process();
}
package abstractfactory;
public class MachineA1 implements MachineA{
@Override
public void process() {
System.out.println("excute MachineA1");
}
}
package abstractfactory;
public class MachineA2 implements MachineA{
@Override
public void process() {
System.out.println("excute MachineA2");
}
}
package abstractfactory;
public interface MachineB {
public void process();
}
package abstractfactory;
public class MachineB1 implements MachineB{
@Override
public void process() {
System.out.println("excute MachineB1");
}
}
package abstractfactory;
public class MachineB2 implements MachineB{
@Override
public void process() {
System.out.println("excute MachineB1");
}
}
package abstractfactory;
public interface MachineFactory {
public MachineA getMachineA();
public MachineB getMachineB();
}
package abstractfactory;
public class MachineFactoryA implements MachineFactory{
@Override
public MachineA getMachineA() {
return new MachineA1();
}
@Override
public MachineB getMachineB() {
return new MachineB1();
}
}
package abstractfactory;
public class MachineFactoryB implements MachineFactory{
@Override
public MachineA getMachineA() {
return new MachineA2();
}
@Override
public MachineB getMachineB() {
return new MachineB2();
}
}
Main Program ๐
package abstractfactory;
public class FactoryMain {
public static void main(String[] args) {
MachineFactory machineFactoryA = new MachineFactoryA();
machineFactoryA.getMachineA().process();
machineFactoryA.getMachineB().process();
MachineFactory machineFactoryB = new MachineFactoryB();
machineFactoryB.getMachineA().process();
machineFactoryB.getMachineB().process();
}
}
excute MachineA1
excute MachineB1
excute MachineA2
excute MachineB1
์ ๋์ํ๋ค.
Closing Remarks ๐ฉ
Abstract Factory Pattern
ย ย ๋์ผํ ์ฒ๋ฆฌ ๋ก์ง์ ํ์ ํด๋์ค์ ๊ฒฐํฉ์ ํตํด ์ ํ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค. ๋ค๋ง, ์๋ก์ด ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋ค๋ฉด ํ์ ํด๋์ค๋ ๊ฐ์ด ์ถ๊ฐํด์ผ ๋๊ณ ํ์ฅ ์ ๋ชจ๋ ํ์ ํด๋์ค์ ์์ ์ด ํ์ํ ์๋ ์๋ค.
Factory method
ย ย 1๊ฐ์ ํ์ ํด๋์ค ๋ด ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์์ฑ์ ์ ํ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๋คํ์ฑ์ ๋จ์ ์ ํด๊ฒฐํ ์ ์๋ค.
๋ค๋ง, ์๋ก์ด ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋ค๋ฉด ์กฐ๊ฑด์ด ์ถ๊ฐ๋์ด์ผ ํ๊ณ ํ์ฅ ์ ํ์ ํด๋์ค์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์๊ฐ ์ด๋ ค์ธ ์ ์๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Design pattern] Abstract Factory Methods ๐, (Creational patterns)), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@daydream/Design-pattern-Abstract-Factory-Pattern์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค