728x90
반응형
2021.11.18_03.인터페이스적용하기
Client.class
public class Client {
public static void main(String[] args) {
Client client = new Client();
Ship whiteship = new WhiteshipFactory().orderShip("Whiteship","oksos@naver.com");
System.out.println(whiteship);
Ship black = new BlackshipFactory().orderShip("Blackship","oksos0817@naver.com");
System.out.println(blackship);
}
}
- 이전에 소스는 Client부분이 수정이되었다.
Client.class
public class Client {
public static void main(String[] args) {
Client client = new Client();
client.print(new WhiteshipFactory(),"whiteship","oksos0817@naver.com");
client.print(new BlackshipFactory(),"blackship","oksos0817@naver.com");
}
private void print (ShipFactory shipFactory, String name, String email){
System.out.println(shipFactory.orderShip(name,email));
}
}
- 인터페이스 기반으로 되어있다면 저런식으로 하면 코드가 변경없이 하지만 어떤것인지는 알아야하지만 변경이 덜된다.
- 클라이언트 변경의 최소화 한것
java9, 11의 경우
default ship orderShip(String name, String email){
validate(name,email);
prepareFor(name);
Ship ship = createShip();
sendEmailTo(email, ship);
return
}
private void sendEmailTo(String email, Ship ship) {
System.out.println(ship.getName() + " 다 만들었습니다.");
}
- 8은 안되고 9 이상 부터 private 메소드를 만들 수 있는 것
- 그렇지 않으면 아래와 같다.
DefaultShipFactory.class
public abstract class DefaultShipFactory implements ShipFactory{
@Override
public void sendEmailTo(String email, Ship ship){
System.out.println(ship.getName()+"다 만들었습니다.");
}
}
ShipFactory.class
private void sendEmailTo(String email, Ship ship) {
System.out.println(ship.getName() + " 다 만들었습니다.");
}
// 이것을 추상메소드로 우선 정의
void sendEmailTo(String email, Ship ship);
- 자바 8의 경우 계층 구조로 만들어서 저렇게 하면되고
- DefaultShipFactory를 상속해주면됨
- 계층구조가 있어서 팩토리 안에서 구체적인 클래스를 만들어냄
- 구체적인 제품을 만들어내는것이 포인트
728x90
반응형
'CS Study > 디자인패턴' 카테고리의 다른 글
2021.11.18_팩토리메소드패턴05.자바와스프링에서찾아보는패턴 (0) | 2021.11.18 |
---|---|
2021.11.18_팩토리메소드패턴04.장점과단점 (0) | 2021.11.18 |
2021.11.15_팩토리메소드패턴02.패턴적용하기 (0) | 2021.11.15 |
2021.11.15_팩토리메소드패턴01.패턴소개 (0) | 2021.11.15 |
2021.11.14_05.자바와스프링에서찾아보는패턴 (0) | 2021.11.14 |
댓글