728x90
반응형
작동원리
비슷한 특징을 가진 여러개의 객체들을 체계적으로 생성하고 싶을 때 사용되는 패턴입니다. 비슷한 기능을 가진 객체들을 Interface로 묶고, 각각의 객체들을 생성하는 Factory를 Interface화 한 후에 상속받아 특성에 맞게 구현해줄 수 있습니다.
위의 예제에서는 OS에 따라 UI객체를 생성하는 Factory를 만들고, 각각의 Factory에서 특성에 맞는 객체들을 생성합니다.
public interface IButton { }
public class AndroidButton : IButton {}
public class IOSButton : IButton {}
public interface Scrollbar { }
public class AndroidScrollbar : Scrollbar { }
public class IOSScrollbar : Scrollbar { }
public interface OS_Factory
{
public IButton CreateButton();
public Scrollbar CreateScrollbar();
}
public class AndroidFactory : OS_Factory
{
public IButton CreateButton()
{
return new AndroidButton();
}
public Scrollbar CreateScrollbar()
{
return new AndroidScrollbar();
}
}
public class IOSFactory : OS_Factory
{
public IButton CreateButton()
{
return new IOSButton();
}
public Scrollbar CreateScrollbar()
{
return new IOSScrollbar();
}
}
public class FactoryOfOSFactory
{
public OS_Factory CreateOS(string type)
{
OS_Factory os_factory = null;
switch (type)
{
case "Android":
os_factory = new AndroidFactory();
break;
case "IOS":
os_factory = new IOSFactory();
break;
}
os_factory.CreateButton();
os_factory.CreateScrollbar();
return os_factory;
}
}
public class Program
{
public void main()
{
FactoryOfOSFactory factoryOfOSFactory = new FactoryOfOSFactory();
OS_Factory androidFactory = factoryOfOSFactory.CreateOS("Android");
OS_Factory iosFactory = factoryOfOSFactory.CreateOS("IOS");
androidFactory.CreateButton();
androidFactory.CreateScrollbar();
iosFactory.CreateButton();
iosFactory.CreateScrollbar();
}
}
장점
1. 팩토리를 생성할때 특성에 맞는 팩토리 하나를 선택하여 주면 그 이후로는 해당 팩토리에서 관련 특성을 가진 객체만 생성하여줍니다.
2. 저 객체들을 생성하는 Client와의 디커플링을 어느정도 보장하여 줍니다.
단점
1. 팩토리에서 생성되는 객체들의 Interface가 종류별로 추가되기 때문에 많은량의 Interface가 생성되고, 코드 또한 더 복잡해질 수 있습니다.
반응형
'디자인패턴' 카테고리의 다른 글
[디자인패턴] 팩토리 메서드 패턴 (Factory Method Pattern) (0) | 2023.05.22 |
---|---|
[디자인패턴] 프로토타입 패턴 (Prototype Pattern) (0) | 2023.05.21 |
[디자인패턴] 샌드박스 패턴(Sandbox Pattern) (0) | 2023.05.20 |
[디자인패턴] 싱글턴(Singleton) (0) | 2023.05.20 |