public interface OrderService { void saveOrder(String orderNo); }
Mysql策略实现:
public class MySqlSaveOrderStrategy implements OrderService { @Override public void saveOrder(String orderNo){ System.out.println("order:" + orderNo + " save to mysql"); } }
Nosql策略实现:
public class NoSqlSaveOrderStrategy implements OrderService { @Override public void saveOrder(String orderNo){ System.out.println("order:" + orderNo + " save to nosql"); } }
使用策略的辅助"容器":
public class OrderServiceExecutor {
private final OrderService service;
public OrderServiceExecutor(OrderService service){ this.service = service; }
public void save(String orderNo){ this.service.saveOrder(orderNo); }
}
运行测试类:
public class OrderServiceTest { public static void main(String[] args){ OrderServiceExecutor executor1 = new OrderServiceExecutor(new MySqlSaveOrderStrategy()); executor1.save("001"); OrderServiceExecutor executor2 = new OrderServiceExecutor(new NoSqlSaveOrderStrategy()); executor2.save("002"); } }
重构后,可以省去2个策略实现类,代码如下:
public static void main(String[] args) { OrderServiceExecutor executor1 = new OrderServiceExecutor((String orderNo) -> System.out.println("order:" + orderNo + " save to mysql")); executor1.save("001");
OrderServiceExecutor executor2 = new OrderServiceExecutor((String orderNo) -> System.out.println("order:" + orderNo + " save to nosql")); executor2.save("002"); }
public class SubjectImpl implements Subject { private final List<Observer> list = new ArrayList<>(); @Override public void registerObserver(Observer o){ list.add(o); } @Override public void notifyAllObserver(String orderNo){ list.forEach(c -> c.notify(orderNo)); } }
观察者的二个实现:
OrderObserver:
public class OrderObserver implements Observer { @Override public void notify(String orderNo){ System.out.println("订单 " + orderNo + " 状态更新为【已支付】"); } }
StockObserver;
public class StockObserver implements Observer { @Override public void notify(String orderNo){ System.out.println("订单 " + orderNo + " 已通知库房发货!"); } }