外观模式学习笔记
在软件开发中,外观模式是一种结构性设计模式,它提供了一个简单的接口,隐藏了底层系统的复杂性。外观模式允许客户端通过简单的方法调用来操作子系统中的多个对象,同时减少了子系统之间的耦合度。
适用场景
当一个系统包含多个子系统或者接口非常复杂时,可以使用外观模式来简化系统的交互和操作。通常情况下,我们可以将外观模式理解为为客户端提供一个简单的门面,使得客户端不需要关心底层的实现细节,而只需要与门面进行交互即可。
实例
假设我们有一个购物车系统,用户可以添加商品到购物车、修改购物车内商品的数量,以及从购物车中删除商品等操作。购物车系统由多个子系统组成,包括商品库存系统、价格计算系统等。
为了简化购物车系统的交互,我们可以使用外观模式,定义一个名为CartFacade
的门面类,封装底层子系统的复杂性。
javaCopy Codepublic class CartFacade {
private ProductInventorySystem pis;
private PriceCalculator priceCal;
public CartFacade() {
pis = new ProductInventorySystem();
priceCal = new PriceCalculator();
}
public void addProductToCart(Product p, int quantity) {
if (pis.isProductAvailable(p)) {
Cart.addItem(new CartItem(p, quantity));
}
}
public void updateProductQuantity(Product p, int newQuantity) {
Cart.findItemByProduct(p).setQuantity(newQuantity);
}
public void removeProductFromCart(Product p) {
Cart.removeItem(p);
}
public double calculateTotalPrice() {
return priceCal.calculatePrice(Cart.getItems());
}
}
在上述代码中,CartFacade
类封装了两个子系统,商品库存系统和价格计算系统,为客户端提供了简单的接口。例如,客户端可以使用addProductToCart
方法将一个商品添加到购物车中,而无需关心商品库存以及价格如何计算。
总结
外观模式是一种非常实用的软件设计模式,它可以帮助我们隐藏底层系统的复杂性,提高系统的可维护性和可扩展性。在使用外观模式时,我们应该尽量保持门面类的简单性,避免将复杂性转移到门面类中。