모델을 효과적으로 만들기

라헬·2022년 12월 25일
0

public class MethodChainingOrderBuilder {

public final Order order = new Order(); // 주문을 빌더로 감쌌다.

private MethodChainingOrderBuilder(String customer) {
order.setCustomer(customer);
}

public static MethodChaingOrderBuilder forCustomer(String customer) {
return new MethodChaningOrderBuilder(customer);
} // 고객의 주문을 만드는 적정 팩토리 메서드

public TreadeBuilder buy(int quantity) {
return new TradeBuilder(this, Trade.Type.BUY, quantity); //주식을 사는 빌더 만들기
}

public TreadeBuilder sell(int quantity) {
return new TradeBuilder(this, Trade.Type.SELL, quantity) //주식을 파는 빌더 만들기
}

public MethodChainingOrderBuilder addTrade(Trade trade) {
order.addTrade(trade) // 주문에 주식 추가
return this; // 유연하게 추가 주문할 수 있게 주문 빌더 자체를 반환
}

public Order end() {
return order;// 주문 만들기 종료하고 반환
}

}

public class TradeBuilder {
private final MethodChainningOrderBuilder builder;
public final Trade trade = new Trade();

private TradeBuilder(MethodChainingOrderBuilder builder,
Trade.Type type, int quantity) P
this.builder = builder;
trade.setType( type );
trade.setQuantity( quantity );
}

public StockBuilder stock(String symbol) {
return new StockBuilder(builder, trade, symbo);
}
}

빌더를 계속 이어가려면 stock클래스의 tradebuilder의 공개 메서드를 이용해서 인스턴스를 만든다.

public class StockBuilder {
private final MethodChaingOrderBuilder builder;
private final Trade trade;
private final Stock stock = new Stock();

private StockBuilder(MethodChainingOrderBuilder builder, Trade trade, String symbol) {
this.builder = builder;
this.trade = trade;
stock.setSymbol(symbol);
}

public TradeBuilderWithStock on(String market) {
stock.setMarket(market);
trade.setStock(stock);
return new TradeBuilderWithStock(builder, trade);
}
}

StockBuilder는 주식의 시장을 지정, 거래에 주식을 추가, 최종 빌더를 반환하는 on메서드를 정의했다.

public class TradeBuilderWithStock {
private final MethodChaingOrderBuilder builder;
private final Trade trade;

public TradeBuilderWithStock(MethodChaingOrderBuilder builder, Trade trade){
this.builder = builder;
this.trade - trade;
}
public MethodChaningOrderBuilder at(double prcice) {
trade.setPrice(price);
return builder.addTrade(trade);
}
}

profile
성장하고 싶은 풀스택 개발자

0개의 댓글