728x90
반응형
지난 코드 베이스 컴포짓 적용하기
Component
public interface Component{
int getPrice();
}
- 공통된 오퍼레이션이 정의되어야하는것이 핵심
Item
public class Item implements Component{
private String name;
private int price;
public Item(String name, int price){
this.name = name;
this.price = price;
}
@Override
public int getPrice(){
return this.price;
}
}
Bag
- before
- 앞에서 말한것 처럼 leaf타입을 참조하면 안되고 compoent를 참조해야함 그래서 아래와 같이해야함
-
public Bag implements Component{ pirvate List<Item> Item = new ArrayList<>(); public void add(Item item) { items.add(item);} public List<Item> getItems() {return items;} @Override pulic int getPrice(){ retutn 0; } }
- after
- before
public class Client { public static void main(String[] args){ Item doranBlade = new Item("도란검", 450); Item healPotion = new Item("체력 물약", 50); Bag bag = new Bag(); bag.add(doranBlade); bag.add(healPotion); Client client = new Client(); client.printPrice(doranBlade); client.printPrice(bag); } private void printPrice(Item item){ System.out.println(item.getPrice()); } private void printPrice(Bag bag){ int sum = bag.getItems().Stream().mapToInt(Item::getPrice).sum(); System.out.println(sum); } }
- after
public class Client { public static void main(String[] args){ Item doranBlade = new Item("도란검", 450); Item healPotion = new Item("체력 물약", 50); Bag bag = new Bag(); bag.add(doranBlade); bag.add(healPotion); Client client = new Client(); client.printPrice(doranBlade); client.printPrice(bag); } private void printPrice(Item item){ System.out.println(item.getPrice()); } private void printPrice(Compoent compoent){ System.out.println(compoent.getPrice()); } }
- 이렇게 쓸 수 있음
- 공통된 인터페이스를 사용해서 저렇게 사용가능
- 가능하면 가장 추상적인 타입으로 쓰면 좋음
- 가격을 어떻게 할지 컴포짓 객체가 알고 , leaf가 안다.
- 전체나 부분이나 동일하게 처리할 수있게됨
- 클라이언트 입장에서는 동일함
Client
-
public Bag implements Component{ pirvate List<Component> component = new ArrayList<>(); public void add(Component component) { items.add(component); } public List<Component> getItems() { return Component; } @Override pulic int getPrice(){ retutn components.stream().mapToInt(Component::getPrice).sum(); } }
728x90
반응형
'CS Study > 디자인패턴' 카테고리의 다른 글
2021.12.09_컴포짓패턴04.자바와스프링에서찾아보는패턴 (0) | 2021.12.09 |
---|---|
2021.12.09_컴포짓패턴03.장점과단점 (0) | 2021.12.09 |
2021.12.09_컴포짓패턴01.패턴소개 (0) | 2021.12.09 |
2021.12.08_브릿지패턴04.자바와스프링에서찾아보는패턴 (0) | 2021.12.08 |
2021.12.08_브릿지패턴03.장점과단점 (0) | 2021.12.08 |
댓글