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
- vuejs
- click.native
- MVVM
- ubuntu
- Factory Method Pattern
- design pattern
- Spring Boot
- data
- zen of python
- builder pattern
- maven
- camel case error
- Python
- Singleton pattern
- v-show vs v-if
- v-model vs v-bind
- $event.target.value
- executable jar
- prototype pattern
- mount point
- java
- kebab case
- IPv6
- Linux
Archives
- Today
- Total
Eddie's Blog
[design pattern] Factory Method Pattern 본문
유형: 생성자 패턴
생성할 대상의 객체(Product의 구현체)와 그것의 생성을 위임하는 Factory를 모두 추상화하고, 대상 객체의 구현 객체는 Factory의 하위 클래스인 Factory 구현체에서 결정하도록 한다. 대상의 생성과 작동을 모두 추상화하고 Factory에 위임하여 사용자는 대상의 구현체(eg. Car, Computer)에 대해 신경 쓰지 않고 Factory로 부터 대상의 작동을 보장받는다. 필요한 적절한 Factory 구현체만을 사용하여 loose-coupling에 도달할 수 있다.
// factories
public abstract class AbstractProductFactory {
protected Product product;
public AbstractProductFactory() {
this.product = this.createProduct();
}
abstract protected Product createProduct();
public void runProduct() {
this.product.operate();
}
}
public class CarFactory extends AbstractProductFactory {
@Override
protected Product createProduct() {
return new Car();
}
}
public class ComputerFactory extends AbstractProductFactory {
@Override
protected Product createProduct() {
return new Computer();
}
}
// products
public interface Product {
void operate();
}
public class Car implements Product {
@Override
public void operate() {
System.out.println("Engine starts!");
}
}
public class Computer implements Product {
@Override
public void operate() {
System.out.println("Computer is running!");
}
}
// result
public class Application {
public static void main(String[] args) {
AbstractProductFactory factory = new CarFactory();
factory.runProduct();// Engine starts!
factory = new ComputerFactory();
factory.runProduct();// Computer is running!
}
}
'programmings' 카테고리의 다른 글
[design pattern] Singleton Pattern (0) | 2019.03.28 |
---|---|
[design pattern] Prototype Pattern (0) | 2019.03.28 |
[design pattern] Builder Pattern (0) | 2019.03.28 |
[design pattern] Abstract Factory Pattern (0) | 2019.03.28 |
[spring boot] How to package a project with shell-executable jar (0) | 2019.02.11 |
Comments