北京百度推广电话seo优化视频教程

张小明 2026/1/9 21:39:39
北京百度推广电话,seo优化视频教程,找竞价托管公司,wdlinux wordpress工厂方法模式是一种创建型设计模式#xff0c;它定义了一个创建对象的接口#xff0c;但让子类决定实例化哪个类。这种模式将对象的实例化推迟到子类#xff0c;从而实现了创建逻辑与使用逻辑的分离。 核心概念解析 image 工厂方法模式包含以下几个关键角色#xff1a; 产…工厂方法模式是一种创建型设计模式它定义了一个创建对象的接口但让子类决定实例化哪个类。这种模式将对象的实例化推迟到子类从而实现了创建逻辑与使用逻辑的分离。核心概念解析image工厂方法模式包含以下几个关键角色产品接口Product Interface定义了产品对象的通用接口具体产品Concrete Products实现产品接口的具体类创建者Creator声明工厂方法返回产品对象具体创建者Concrete Creators重写工厂方法返回具体产品实例为什么使用工厂方法模式解决紧耦合问题考虑以下紧耦合的代码class Car {drive() {console.log(Driving a car);}}class Truck {drive() {console.log(Driving a truck);}}// 客户端代码直接依赖具体类const vehicle1 new Car();const vehicle1 new Truck();这种写法的问题在于客户端代码直接依赖于具体类一旦需要添加新的车辆类型或修改创建逻辑就需要在所有使用的地方进行修改。实现开闭原则工厂方法模式帮助你的代码遵循开闭原则对扩展开放对修改关闭。你可以添加新的产品类型而无需修改现有代码。工厂方法模式实现让我们通过一个完整的示例来理解工厂方法模式。第一步定义产品接口interface Vehicle {drive(): void;getInfo(): string;}第二步实现具体产品类class Car implements Vehicle {drive() {console.log(Driving a car);}getInfo(): string {return This is a car with 4 seats;}}class Truck implements Vehicle {drive() {console.log(Driving a truck);}getInfo(): string {return This is a truck for heavy loads;}}class Motorcycle implements Vehicle {drive() {console.log(Riding a motorcycle);}getInfo(): string {return This is a motorcycle with 2 wheels;}}第三步创建抽象创建者类abstract class VehicleFactory {// 工厂方法public abstract createVehicle(): Vehicle;// 业务逻辑方法public deliverVehicle(): string {const vehicle this.createVehicle();vehicle.drive();return vehicle.getInfo();}}第四步实现具体创建者类class CarFactory extends VehicleFactory {public createVehicle(): Vehicle {return new Car();}}class TruckFactory extends VehicleFactory {public createVehicle(): Vehicle {return new Truck();}}class MotorcycleFactory extends VehicleFactory {public createVehicle(): Vehicle {return new Motorcycle();}}第五步客户端使用function clientCode(factory: VehicleFactory) {console.log(Client: Delivery process started...);const result factory.deliverVehicle();console.log(result);}// 使用不同的工厂创建不同的产品console.log(App: Launched with CarFactory.);clientCode(new CarFactory());console.log(\nApp: Launched with TruckFactory.);clientCode(new TruckFactory());console.log(\nApp: Launched with MotorcycleFactory.);clientCode(new MotorcycleFactory());高级应用参数化工厂方法在某些场景下你可能希望通过参数来决定创建哪种产品class UniversalVehicleFactory extends VehicleFactory {constructor(private vehicleType: car | truck | motorcycle) {super();}public createVehicle(): Vehicle {switch (this.vehicleType) {case car:return new Car();case truck:return new Truck();case motorcycle:return new Motorcycle();default:throw new Error(Unknown vehicle type);}}}// 使用参数化工厂const carFactory new UniversalVehicleFactory(car);clientCode(carFactory);结合 TypeScript 的高级特性使用泛型增强类型安全abstract class GenericVehicleFactoryT extends Vehicle {public abstract createVehicle(): T;public deliverVehicle(): string {const vehicle this.createVehicle();vehicle.drive();return vehicle.getInfo();}}class GenericCarFactory extends GenericVehicleFactoryCar {public createVehicle(): Car {return new Car();}}利用枚举提高代码可读性enum VehicleType {CAR car,TRUCK truck,MOTORCYCLE motorcycle}class EnumVehicleFactory extends VehicleFactory {constructor(private type: VehicleType) {super();}public createVehicle(): Vehicle {switch (this.type) {case VehicleType.CAR:return new Car();case VehicleType.TRUCK:return new Truck();case VehicleType.MOTORCYCLE:return new Motorcycle();}}}实际应用场景场景一UI 组件库在不同平台Web、Mobile、Desktop上创建相同功能的 UI 组件interface Button {render(): void;onClick(callback: () void): void;}class WebButton implements Button {render() { console.log(Rendering web button); }onClick(callback: () void) { /* web 实现 */ }}class MobileButton implements Button {render() { console.log(Rendering mobile button); }onClick(callback: () void) { /* mobile 实现 */ }}abstract class UIFactory {abstract createButton(): Button;abstract createModal(): Modal; // 假设有 Modal 接口}class WebUIFactory extends UIFactory {createButton(): Button { return new WebButton(); }createModal(): Modal { return new WebModal(); }}场景二数据库连接工厂interface DatabaseConnection {connect(): void;query(sql: string): any[];}class MySQLConnection implements DatabaseConnection {connect() { console.log(Connecting to MySQL); }query(sql: string) { return []; }}class PostgreSQLConnection implements DatabaseConnection {connect() { console.log(Connecting to PostgreSQL); }query(sql: string) { return []; }}abstract class DatabaseFactory {abstract createConnection(): DatabaseConnection;}class MySQLFactory extends DatabaseFactory {createConnection(): DatabaseConnection {return new MySQLConnection();}}真实案例TypeORM 的 Driver 工厂 使用工厂方法来根据数据库类型创建不同驱动实例。export class DriverFactory {create(connection: Connection): Driver {switch (connection.options.type) {case mysql:return new MysqlDriver(connection)case postgres:return new PostgresDriver(connection)case sqlite:return new SqliteDriver(connection)// ...}}}基于数据库类型返回不同的 Driver 子类统一入口 create()使用者不关心具体 driver只依赖 Driver 接口工厂方法模式的优势与局限优势避免紧耦合客户端代码只依赖于抽象接口不依赖于具体类单一职责原则将创建逻辑集中在一个地方便于维护开闭原则添加新产品类型时无需修改现有代码代码可测试性可以轻松创建模拟对象进行单元测试局限代码复杂度增加需要引入多个额外的类和接口可能过度设计对于简单场景直接实例化可能更合适实践建议适时使用当预计会有多种类似产品或创建逻辑比较复杂时使用结合依赖注入在大型应用中结合依赖注入容器使用效果更佳文档化工厂意图明确每个工厂的职责和适用场景考虑简单工厂如果产品类型不多可以考虑使用简单工厂模式
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

成都 网站建设培训班wordpress seo链接

Git Commit历史清理对Qwen3-VL-8B项目维护的影响 在AI模型开发日益工程化的今天,一个看似不起眼的“提交记录”问题,可能正悄悄拖慢整个团队的迭代节奏。想象一下:新成员入职第一天,克隆代码仓库花了整整15分钟——不是因为网络差…

张小明 2026/1/7 13:22:10 网站建设

网站建设找美橙互联建立的近义词

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

张小明 2026/1/6 16:55:19 网站建设

建设银行网站服务功能许柯wordpress

音频切片工具的终极指南:如何快速分割音频文件 【免费下载链接】audio-slicer 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 在音频处理领域,音频切片是提高工作效率的关键技术。无论你是音乐制作人、播客创作者,还是…

张小明 2026/1/7 2:18:12 网站建设

常德网站建设产品网站定制开发流程和功能

探索 Tinker Board 上的 Android 系统 1. 主屏幕介绍 当你选定好 Android 系统的导航方式后,就可以来看看华硕提供的默认主屏幕了。主屏幕右上角有电池状态图标和时钟,和安卓手机的显示类似。屏幕中部有联系人应用图标,其下方从左到右依次是电子邮件、网络浏览器、应用菜单…

张小明 2026/1/7 5:44:40 网站建设

西峡县住房和城乡建设局网站百合视频做爰视频网站

信任与安全项目集群及电子身份使用情况分析 信任与安全项目集群 项目集群的长期价值 如果结构合理,信任与安全项目集群的长期延续和扩展对单个项目以及框架计划的信任和安全方面具有潜在的益处和有效性。 近期步骤 开始构建集群社区,解决行政、范围、推广和结构等问题,…

张小明 2026/1/1 12:47:07 网站建设

怎么弄网站做网站卖东西wordpress 删除模板

Wan2.2-T2V-A14B模型在政府公共服务宣传中的试点实践 在一次突如其来的流感高发季,某省疾控中心需要迅速向公众传达疫苗接种的重要性。以往,制作一条高质量的公益宣传视频至少需要五到七天:脚本撰写、演员协调、实地拍摄、后期剪辑……每一步…

张小明 2026/1/1 12:46:45 网站建设