250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 터치디자이너 python
- 터치디자이너 Instancing
- 터치디자이너 파이썬
- touchdesinger
- displace
- 터치디자이너 오퍼레이터
- 터치디자이너 timeline
- 터치디자이너 if
- TDableton
- 터치디자이너 튜토리얼
- touchdesigner displace
- 터치디자이너 interface
- 터치디자이너 에이블톤
- 파이썬reference
- touchdesigner GPU
- 터치디자이너
- 파이썬 if
- 터치디자이너 인터페이스
- 터치디자이너 클론
- touchdesigner particle
- TouchDesigner
- 파이썬
- ableton live 10
- 터치디자이너 reference
- 터치디자이너 replicator
- 터치디자이너 list
- 터치디자이너 강의
- 터치디자이너 참조
- 터치디자이너 함수
- particleGPU
Archives
- Today
- Total
caLAB
[디자인 패턴] 팩토리 패턴 본문
728x90
팩토리 패턴이란?
Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이다.
코드
1. 상속 사용 / 공장 1개 제품 다수
using System;
using System.Collections.Generic;
namespace factoryPattern_simple
{
class Program
{
static public List<Product> pList = new List<Product>();
static public List<Creator> cList = new List<Creator>();
static void Main(string[] args)
{
//생성자 생성
Creator c = new Creator();
//주문 생성
productCreate(c, "productA");
productCreate(c, "productB");
productCreate(c, "productC");
//최종 주문 관련 리스트 출력
Console.WriteLine("\nprint out product list.");
for (int i = 0; i < pList.Count; i++)
{
Console.WriteLine(i + "\nproduct :" + pList[i] + "\ncreator :" + cList[i]);
}
}
//제품 생산 및 리스트 추가
static public void productCreate(Creator creator, string product)
{
var _product = creator.order(product);
pList.Add(_product);
cList.Add(creator);
}
}
//제품
public class Product
{
//프로덕트들이 공유하는 함수
public void Do()
{
Console.WriteLine("do nothing");
}
}
class ProductA : Product
{
public int ID;
public ProductA(int id)
{
this.ID = id;
}
//productA 함수
public void make()
{
Console.WriteLine("this is productA make");
}
}
class ProductB : Product
{
public int ID;
public ProductB(int id)
{
this.ID = id;
}
//productB 함수
public void make()
{
Console.WriteLine("this is productB make");
}
}
class ProductC : Product
{
public int ID;
public ProductC(int id)
{
this.ID = id;
}
//productC 함수
public void make()
{
Console.WriteLine("this is productC make");
}
}
//생성자
class Creator
{
int a_id = 0;
int b_id = 0;
int c_id = 0;
public Product order(String message)
{
Console.WriteLine("CreatorA gets order.");
if (message == "productA")
{
a_id++;
return new ProductA(a_id);
}
if (message == "productB")
{
b_id++;
return new ProductB(b_id);
}
if (message == "productC")
{
c_id++;
return new ProductC(c_id);
}
return null;
}
}
}
2. abstract 사용 / 공장 다수 제품 다수
using System;
using System.Collections.Generic;
namespace factoryPattern_simple
{
class Program
{
static public List<Product> pList = new List<Product>();
static public List<Creator> cList = new List<Creator>();
static void Main(string[] args)
{
//생성자 생성
CreatorA ca = new CreatorA();
CreatorB cb = new CreatorB();
//주문 생성
productCreate(ca, "productA");
productCreate(cb, "productB");
productCreate(ca, "productC");
productCreate(cb, "productA");
productCreate(cb, "productB");
productCreate(ca, "productC");
//최종 주문 관련 리스트 출력
Console.WriteLine("\nprint out product list.");
for(int i = 0; i < pList.Count; i++)
{
Console.WriteLine(i + "\nproduct :" + pList[i] + "\ncreator :" + cList[i]);
}
}
//제품 생산 및 리스트 추가
static public void productCreate(Creator creator, string product)
{
var _product = creator.order(product);
pList.Add(_product);
cList.Add(creator);
}
}
//제품
abstract class Product
{
public abstract void make();
}
class ProductA : Product
{
public override void make() => Console.WriteLine("productA make");
}
class ProductB : Product
{
public override void make() => Console.WriteLine("productB make");
}
class ProductC : Product
{
public override void make() => Console.WriteLine("productC make");
}
//생성자
abstract class Creator
{
public abstract Product order(String message);
}
class CreatorA : Creator
{
public override Product order(String message)
{
Console.WriteLine("CreatorA gets order.");
if (message == "productA")
return new ProductA();
if (message == "productB")
return new ProductB();
if (message == "productC")
return new ProductC();
return null;
}
}
class CreatorB : Creator
{
public override Product order(String message)
{
Console.WriteLine("CreatorB gets order.");
if (message == "productA")
return new ProductA();
if (message == "productB")
return new ProductB();
if (message == "productC")
return new ProductC();
return null;
}
}
}
728x90
반응형
'개발 공부 > 컴퓨터 과학' 카테고리의 다른 글
비전공자의 컴퓨터 과학 이론 공부하기 (0) | 2021.08.30 |
---|---|
[이것이 C#이다.] 개념01 - CLR, JIT컴파일러, 메모리 공간, CTS (0) | 2021.07.09 |
[자료구조] 큐(Que), 스택(Stack) 배열로 구현 (0) | 2021.06.29 |
[WPF] UI 이벤트 (이벤트 핸들러, 쓰레드) (0) | 2021.06.29 |
[디자인 패턴 C#] 싱글톤(Singleton) (0) | 2021.06.29 |
Comments