# JavaDesignPattern **Repository Path**: lsn199603/java-design-pattern ## Basic Information - **Project Name**: JavaDesignPattern - **Description**: 设计模式课程代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-06 - **Last Updated**: 2026-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 模式 本项目展示了 Java 中常用的**设计模式(Design Patterns)**的完整实现,包括工厂方法模式、抽象工厂模式和外观模式等。 ## 项目简介 设计模式是软件设计中经过验证的解决方案,能够帮助开发者构建可维护、可扩展、易于理解的花代码。本项目通过具体的业务场景,演示了多种创建型和结构型设计模式的实现。 ## 项目结构 ``` src/ ├── FactoryMethodPattern/ # 工厂方法模式 - 支付场景 │ ├── Creator/ │ │ └── PayFactory.java # 抽象工厂接口 │ ├── AbstractProduct/ │ │ └── Pay.java # 抽象产品接口 │ ├── ConcreteCreator/ │ │ ├── AlipayFactory.java # 支付宝工厂 │ │ ├── WeChatFactory.java # 微信支付工厂 │ │ └── UnionPayFactory.java # 银联支付工厂 │ ├── ConcreteProduct/ │ │ ├── Alipay.java # 支付宝产品 │ │ ├── WeChatPay.java # 微信支付产品 │ │ └── UnionPay.java # 银联支付产品 │ └── Client.java # 客户端测试 │ ├── AbstractFactoryPattern/ # 抽象工厂模式 - GUI 组件 │ ├── AbstractFactory/ │ │ └── GuiFactory.java # 抽象工厂接口 │ ├── AbstractProduct/ │ │ ├── Button.java # 抽象按钮产品 │ │ └── Checkbox.java # 抽象复选框产品 │ ├── ConcreteFactory/ │ │ ├── MacFactory.java # Mac 工厂 │ │ └── WinFactory.java # Windows 工厂 │ ├── ConcreteProduct/ │ │ ├── MacButton.java # Mac 按钮 │ │ ├── MacCheckbox.java # Mac 复选框 │ │ ├── WinButton.java # Windows 按钮 │ │ └── WinCheckbox.java # Windows 复选框 │ └── Client.java # 客户端测试 │ ├── FacadePattern/ # 外观模式 - 订单处理 │ ├── Facade/ │ │ └── OrderFacade.java # 订单外观类 │ ├── SubSystem/ │ │ ├── InventoryService.java # 库存服务 │ │ ├── OrderService.java # 订单服务 │ │ ├── PaymentService.java # 支付服务 │ │ └── ShippingService.java # 物流服务 │ └── Client.java # 客户端测试 │ └── FacadePattern_1/ # 外观模式 - 广告服务 ├── Facade/ │ └── ServerFacade.java # 服务外观类 ├── subsystem/ │ ├── Charge.java # 收费子系统 │ ├── CheckWord.java # 审核子系统 │ └── TypeSetting.java # 排版子系统 └── Client.java # 客户端测试 ``` ## 设计模式说明 ### 1. 工厂方法模式(Factory Method Pattern) **定义**:定义一个创建对象的接口,但由子类决定实例化哪一个类。 **应用场景**:支付场景,支持多种支付方式(支付宝、微信、银联) **核心角色**: - `PayFactory`:抽象工厂接口 - `Pay`:抽象产品接口 - `AlipayFactory/Alipay`:具体工厂和具体产品 **优点**:新增支付方式只需创建新产品类和对应工厂类,符合开闭原则 ### 2. 抽象工厂模式(Abstract Factory Pattern) **定义**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 **应用场景**:跨平台 GUI 组件开发 **核心角色**: - `GuiFactory`:抽象工厂(MacFactory/WinFactory) - 抽象产品(Button/Checkbox) - 具体产品(MacButton/WinButton 等) **优点**:保证同一产品族的产品兼容性,方便切换产品族 ### 3. 外观模式(Facade Pattern) **定义**:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得子系统更加容易使用。 **应用场景**:订单处理流程、广告服务业务流程 **核心角色**: - `OrderFacade`:订单处理门面 - `ServerFacade`:广告服务门面 - 各子系统服务 **优点**:简化客户端调用,隐藏内部复杂度 ## 快速开始 ### 环境要求 - JDK 8 或更高版本 ### 编译运行 ```bash # 编译所有模式示例 find src -name "*.java" -exec javac -d out {} + # 运行工厂方法模式示例 java -cp out FactoryMethodPattern.Client # 运行抽象工厂模式示例 java -cp out AbstractFactoryPattern.Client # 运行外观模式示例 java -cp out FacadePattern.Client ``` ### 使用示例 #### 工厂方法模式 ```java public class PaymentService { public void pay(PayFactory factory) { Pay pay = factory.createPay(); pay.pay(); } public static void main(String[] args) { PaymentService service = new PaymentService(); // 使用支付宝支付 service.pay(new AlipayFactory()); // 使用微信支付 service.pay(new WeChatFactory()); // 使用银联支付 service.pay(new UnionPayFactory()); } } ``` #### 抽象工厂模式 ```java public class Client { public static void main(String[] args) { // 根据需求选择使用 Mac 或 Win 风格 GuiFactory factory = new MacFactory(); // 或 // GuiFactory factory = new WinFactory(); Button button = factory.createButton(); Checkbox checkbox = factory.createCheckbox(); button.paint(); checkbox.paint(); } } ``` #### 外观模式 ```java public class Client { public static void main(String[] args) { // 简化订单处理流程 OrderFacade orderFacade = new OrderFacade(); orderFacade.placeOrder("user001", "product001", 99.9); } } ``` ## 许可证 本项目仅供学习交流使用。