当前位置: 首页 > wzjs >正文

青岛建个网站多少钱在自己的电脑建设空间网站

青岛建个网站多少钱,在自己的电脑建设空间网站,cms网站后台管理系统,文登做网站的公司门面设计模式(Facade Pattern) 意图:为复杂的子系统提供一个简化的接口。它旨在减少系统的复杂性,并使客户端更容易与子系统交互。 结构: Facade(门面):提供一个简化的接口&#…

门面设计模式(Facade Pattern)

意图:为复杂的子系统提供一个简化的接口。它旨在减少系统的复杂性,并使客户端更容易与子系统交互。

结构

  1. Facade(门面):提供一个简化的接口,隐藏了内部子系统的复杂性。
  2. Subsystems(子系统):这些是复杂的模块或类,它们通过Facade暴露给外界。

优点

  • 简化了客户端的使用,减少了客户端与子系统之间的耦合。
  • 提高了系统的可维护性和可扩展性。
  • 降低了系统的复杂度,使得系统更容易理解和使用。

缺点

  • 如果门面设计得过于简单或功能有限,可能会限制其灵活性。
  • 可能会引入额外的抽象层,增加系统的复杂度。
更详细的实例

假设你正在开发一个电子商务平台,该平台需要处理用户认证、订单管理和支付处理等任务。每个任务都有其自己的复杂API。

// 用户认证服务
class AuthenticationService {public boolean authenticate(String username, String password) {System.out.println("Authenticating user: " + username);return true; // 假设认证成功}
}// 订单管理服务
class OrderService {public void placeOrder(String productId, int quantity) {System.out.println("Placing order for product: " + productId + ", Quantity: " + quantity);}public void cancelOrder(String orderId) {System.out.println("Cancelling order: " + orderId);}public void updateOrderStatus(String orderId, String status) {System.out.println("Updating order status for order: " + orderId + " to " + status);}
}// 支付处理服务
class PaymentService {public void processPayment(String cardNumber, double amount) {System.out.println("Processing payment of $" + amount + " with card: " + cardNumber);}public void refundPayment(String transactionId) {System.out.println("Refunding payment for transaction: " + transactionId);}public void checkPaymentStatus(String transactionId) {System.out.println("Checking payment status for transaction: " + transactionId);}
}// 门面类
class ECommerceFacade {private AuthenticationService authService = new AuthenticationService();private OrderService orderService = new OrderService();private PaymentService paymentService = new PaymentService();public void makePurchase(String username, String password, String productId, int quantity, String cardNumber, double amount) {if (authService.authenticate(username, password)) {orderService.placeOrder(productId, quantity);paymentService.processPayment(cardNumber, amount);System.out.println("Purchase completed successfully.");} else {System.out.println("Authentication failed.");}}public void cancelAndRefund(String username, String password, String orderId, String transactionId) {if (authService.authenticate(username, password)) {orderService.cancelOrder(orderId);paymentService.refundPayment(transactionId);System.out.println("Order cancelled and payment refunded successfully.");} else {System.out.println("Authentication failed.");}}public void updateOrderStatus(String username, String password, String orderId, String status) {if (authService.authenticate(username, password)) {orderService.updateOrderStatus(orderId, status);System.out.println("Order status updated successfully.");} else {System.out.println("Authentication failed.");}}public void checkPayment(String username, String password, String transactionId) {if (authService.authenticate(username, password)) {paymentService.checkPaymentStatus(transactionId);System.out.println("Payment status checked successfully.");} else {System.out.println("Authentication failed.");}}
}// 客户端代码
public class Main {public static void main(String[] args) {ECommerceFacade facade = new ECommerceFacade();// 购买商品facade.makePurchase("user123", "password123", "product456", 2, "1234567890123456", 199.99);// 取消订单并退款facade.cancelAndRefund("user123", "password123", "order789", "transaction101");// 更新订单状态facade.updateOrderStatus("user123", "password123", "order789", "Shipped");// 检查支付状态facade.checkPayment("user123", "password123", "transaction101");}
}

在这个例子中,ECommerceFacade提供了四个方法:makePurchasecancelAndRefundupdateOrderStatuscheckPayment,隐藏了用户认证、订单管理和支付处理的复杂细节。

适配器设计模式(Adapter Pattern)

意图:将一个类的接口转换成另一个接口。它通常用于解决现有组件与新系统不兼容的问题,或者整合不同供应商的组件。

结构

  1. Target(目标接口):定义客户端使用的接口。
  2. Adaptee(被适配者):已经存在的接口,需要被适配。
  3. Adapter(适配器):将Adaptee的接口转换成Target接口。

优点

  • 提高了系统的灵活性和复用性。
  • 允许旧系统与新系统无缝集成。
  • 实现接口的多态性。

缺点

  • 增加了系统的复杂度,因为引入了额外的适配层。
  • 如果适配器设计不当,可能会影响性能。
更详细的实例

假设你有一个旧版的日志记录系统(OldLogger),现在需要与新版的日志管理系统(期望实现NewLoggerInterface接口)集成。

// 旧版日志记录系统
class OldLogger {public void logInfo(String message) {System.out.println("Old Logger: Info - " + message);}public void logError(String message) {System.out.println("Old Logger: Error - " + message);}public void logWarning(String message) {System.out.println("Old Logger: Warning - " + message);}
}// 新版日志接口
interface NewLoggerInterface {void info(String message);void error(String message);void warning(String message);
}// 适配器类
class LoggerAdapter implements NewLoggerInterface {private OldLogger oldLogger;public LoggerAdapter(OldLogger oldLogger) {this.oldLogger = oldLogger;}@Overridepublic void info(String message) {oldLogger.logInfo(message);}@Overridepublic void error(String message) {oldLogger.logError(message);}@Overridepublic void warning(String message) {oldLogger.logWarning(message);}
}// 客户端代码
public class Main {public static void main(String[] args) {OldLogger oldLogger = new OldLogger();LoggerAdapter adapter = new LoggerAdapter(oldLogger);adapter.info("This is an info message.");adapter.error("This is an error message.");adapter.warning("This is a warning message.");}
}

在这个例子中,LoggerAdapter实现了NewLoggerInterface接口,并在内部调用了OldLogger的方法。即使旧版日志系统没有直接支持警告日志的功能,我们也可以在适配器中实现这些操作。

复杂情况和最佳实践

复杂情况
  1. 多层次的门面:有时一个系统可能包含多个层次的门面,每个层次都简化了下一层的操作。例如,在大型企业级应用中,可能会有多个门面来分别处理不同的业务领域。

    // 高级门面类
    class AdvancedECommerceFacade extends ECommerceFacade {public void bulkPurchase(List<Order> orders, String cardNumber, double totalAmount) {authenticateAdmin(); // 需要管理员权限for (Order order : orders) {super.makePurchase(order.getUsername(), order.getPassword(), order.getProductId(), order.getQuantity(), cardNumber, totalAmount / orders.size());}System.out.println("Bulk purchase completed successfully.");}private void authenticateAdmin() {System.out.println("Authenticating as admin...");}
    }
  2. 多重适配器:当需要适配多个不同的系统时,可以使用多重适配器。每个适配器负责将一个特定的旧系统适配到新的接口。

    // 第二个旧版日志记录系统
    class AnotherOldLogger {public void writeLog(String level, String message) {System.out.println("Another Old Logger: " + level + " - " + message);}
    }// 第二个适配器类
    class AnotherLoggerAdapter implements NewLoggerInterface {private AnotherOldLogger anotherOldLogger;public AnotherLoggerAdapter(AnotherOldLogger anotherOldLogger) {this.anotherOldLogger = anotherOldLogger;}@Overridepublic void info(String message) {anotherOldLogger.writeLog("INFO", message);}@Overridepublic void error(String message) {anotherOldLogger.writeLog("ERROR", message);}@Overridepublic void warning(String message) {anotherOldLogger.writeLog("WARNING", message);}
    }
最佳实践
  1. 保持门面简洁:门面应该尽可能简洁,只提供必要的功能。避免让门面变得过于复杂,否则会失去其简化系统的目的。

  2. 灵活的适配器设计:适配器的设计应尽量灵活,允许在未来轻松添加新的适配逻辑。可以通过使用策略模式或工厂模式来增强适配器的灵活性。

    // 使用工厂模式创建适配器
    interface LoggerFactory {NewLoggerInterface createLogger();
    }class OldLoggerFactory implements LoggerFactory {@Overridepublic NewLoggerInterface createLogger() {return new LoggerAdapter(new OldLogger());}
    }class AnotherOldLoggerFactory implements LoggerFactory {@Overridepublic NewLoggerInterface createLogger() {return new AnotherLoggerAdapter(new AnotherOldLogger());}
    }
  3. 测试和验证:无论是门面还是适配器,都需要进行充分的测试和验证,以确保它们能够正确地工作,并且不会引入新的问题。

总结

通过上述详细的解释和示例,可以看出:

  • 门面设计模式主要用于简化复杂的子系统接口,使得外部与子系统的交互更加简单。适用于需要简化多个模块或库之间的复杂交互场景。
  • 适配器设计模式用于解决接口不兼容的问题,使得不同的接口能够协同工作。适用于需要集成旧系统与新系统或不同供应商组件的场景。

文章转载自:

http://uqgXRUnJ.yghLr.cn
http://Pb5a1H1X.yghLr.cn
http://D1VKejij.yghLr.cn
http://avGNEBom.yghLr.cn
http://o1wrBrkp.yghLr.cn
http://wrUSV74B.yghLr.cn
http://cekUDCat.yghLr.cn
http://828ehxYr.yghLr.cn
http://8t1XB0Qt.yghLr.cn
http://9IWez22o.yghLr.cn
http://IOtKeVKI.yghLr.cn
http://mmSM2yQG.yghLr.cn
http://OKwYc8Yo.yghLr.cn
http://zlq6zKET.yghLr.cn
http://DEqfroTn.yghLr.cn
http://NpT1QOUD.yghLr.cn
http://jOhjQd4K.yghLr.cn
http://KZDYsxXy.yghLr.cn
http://DTErI2nu.yghLr.cn
http://FIoPCMMv.yghLr.cn
http://EkHmVpKS.yghLr.cn
http://esIF0tF1.yghLr.cn
http://MwJ6BgVa.yghLr.cn
http://bOIWh07V.yghLr.cn
http://oiWbAVj8.yghLr.cn
http://wJ8y1TgV.yghLr.cn
http://FrE9QFqF.yghLr.cn
http://6CPpwb4U.yghLr.cn
http://G2YiSTMq.yghLr.cn
http://rRz8E5bo.yghLr.cn
http://www.dtcms.com/wzjs/688599.html

相关文章:

  • 自助建站系统哪个好用网站制作公司在哪里找
  • 某公司网站策划建设wordpress 广告关闭
  • 赣州网站建设联系方式商场装修
  • 个人网站风格网站建立需要什么
  • 网站开发市场前景wordpress 用户打赏
  • 深圳o2o网站建设企业运营效率的三个指标
  • 获得网站php管理员密码合肥哪个公司做网站好
  • 知名营销网站山东网站
  • 企业网站建设英文珠海市住房城乡建设局网站
  • 精通网站建设需要学什么小工作室做网站
  • 淮北市网站制作公司广东网站建设包括什么软件
  • 圣辉友联网站建设中国建设工程造价管理系统网站
  • 公司怎么做网站centos 安装wordpress lnmp
  • 用cms创建自己带数据库的网站广东网站建设的
  • 网站建设项目组工作总结网站开发建设合同范本
  • 建设一个网站需要哪些硬件设备浙江网站建设推广公司找哪家
  • 个人做流量大的网站网站建设需要写语句吗
  • 公司网站上荣誉墙怎么做手机网站建设规范
  • 网站建设太原小程序解决方案网页模板下载
  • 网站运营的案例网站建设技术中心
  • 深圳建网站信科wordpress手机建站教程
  • 效果图网站大全微信ios分身版下载
  • 做网站的销售小规模企业所得税怎么算
  • 手机套 东莞网站建设报考网页
  • 宁波网站制作 收费数据库与网站
  • 青岛建设银行官方网站招商网站建设解决方案
  • 如何做网站教学外国网站建设
  • 德州网站建设哪家好公司营业执照可以做几个网站
  • 西安免费做网站wordpress干洗店模板
  • 大连网站建设新图闻wordpress 存储