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

单仁咨询建设网站互联网技术的特点

单仁咨询建设网站,互联网技术的特点,晋江模板建站,成都网站设计网站制作公司工厂方法模式(Factory Method Pattern)学习笔记 🌟 定义 工厂方法模式属于创建型设计模式,定义一个创建对象的接口,但让子类决定实例化哪一个类。将类的实例化操作延迟到子类,是面向对象设计中"开闭…

工厂方法模式(Factory Method Pattern)学习笔记

🌟 定义

工厂方法模式属于创建型设计模式,定义一个创建对象的接口,但让子类决定实例化哪一个类。将类的实例化操作延迟到子类,是面向对象设计中"开闭原则"的典型体现。


🎯 适用场景

  1. 需要解耦对象创建与使用
  2. 无法预知对象确切类型及其依赖关系
  3. 需要为不同环境提供不同产品实现
  4. 需要扩展系统时不影响已有代码
  5. 框架设计(允许用户扩展框架组件)

🔧 模式结构

📐 类图

«abstract»
Creator
+factoryMethod() : Product
+operation()
ConcreteCreatorA
+factoryMethod() : Product
ConcreteCreatorB
+factoryMethod() : Product
«interface»
Product
+doSomething()
ConcreteProductA
+doSomething()
ConcreteProductB
+doSomething()

🛠️ 核心组成

  1. Creator(抽象创建者)

    • 声明工厂方法(可包含默认实现)
    • 通过工厂方法获取产品对象
  2. ConcreteCreator(具体创建者)

    • 重写工厂方法,返回具体产品实例
  3. Product(抽象产品)

    • 定义产品接口
  4. ConcreteProduct(具体产品)

    • 实现抽象产品接口的具体类

📝 代码示例

文档处理系统案例

// 抽象产品:文档
interface Document {void open();void save();void close();
}// 具体产品:Word文档
class WordDocument implements Document {@Overridepublic void open() {System.out.println("打开Word文档");}@Overridepublic void save() {System.out.println("保存Word文档");}@Overridepublic void close() {System.out.println("关闭Word文档");}
}// 具体产品:PDF文档
class PDFDocument implements Document {@Overridepublic void open() {System.out.println("打开PDF文档");}@Overridepublic void save() {System.out.println("保存PDF文档");}@Overridepublic void close() {System.out.println("关闭PDF文档");}
}// 抽象创建者:应用程序
abstract class Application {// 工厂方法public abstract Document createDocument();// 业务方法public void newDocument() {Document doc = createDocument();doc.open();doc.save();doc.close();}
}// 具体创建者:Word应用
class WordApplication extends Application {@Overridepublic Document createDocument() {return new WordDocument();}
}// 具体创建者:PDF应用
class PDFApplication extends Application {@Overridepublic Document createDocument() {return new PDFDocument();}
}// 客户端使用
public class Client {public static void main(String[] args) {Application app = getApplication();app.newDocument();}private static Application getApplication() {// 根据配置或环境选择具体创建者return new WordApplication();// return new PDFApplication();}
}

✅ 优点

  1. 解耦客户端与具体产品类
  2. 符合开闭原则(新增产品不影响已有代码)
  3. 支持单一职责原则(创建逻辑集中管理)
  4. 支持可扩展性(容易添加新产品类型)
  5. 可作为框架基础(定义扩展点)

⚠️ 缺点

  1. 需要引入多个新类(增加复杂度)
  2. 需要继承体系(可能破坏封装性)
  3. 仅适用于相同产品类型的不同实现
  4. 需要预先设计工厂层次结构

🔄 相关模式对比

模式区别
简单工厂静态工厂方法 vs 多态工厂方法
抽象工厂创建产品族 vs 创建单个产品
模板方法共用算法骨架 vs 创建对象实例

💡 实践建议

  1. 命名规范

    • 工厂方法通常命名为createXxx()
    • 具体产品类使用产品类型+Product格式
  2. 组合使用技巧

    // 结合单例模式
    class DatabaseConnectionFactory {private static final ConnectionFactory instance = new MySQLConnectionFactory();public static Connection getConnection() {return instance.createConnection();}
    }
    
  3. 参数化工厂

    enum DocumentType { WORD, PDF, MARKDOWN }class UniversalApplication extends Application {private DocumentType type;public UniversalApplication(DocumentType type) {this.type = type;}@Overridepublic Document createDocument() {switch(type) {case WORD: return new WordDocument();case PDF: return new PDFDocument();default: throw new IllegalArgumentException();}}
    }
    
  4. 依赖注入

    // 通过构造函数注入工厂
    class DocumentService {private final DocumentFactory factory;public DocumentService(DocumentFactory factory) {this.factory = factory;}public void processDocument() {Document doc = factory.createDocument();// 处理文档...}
    }
    

🚀 典型应用

  1. Java集合框架

    // Iterator工厂方法
    List<String> list = new ArrayList<>();
    Iterator<String> it = list.iterator();  // 工厂方法
    
  2. Spring框架

    // BeanFactory接口
    public interface BeanFactory {Object getBean(String name);
    }
    
  3. 日志框架

    // Logger工厂
    Logger logger = LoggerFactory.getLogger(MyClass.class);
    
  4. JDBC驱动

    // DriverManager.getConnection()本质是工厂方法
    Connection conn = DriverManager.getConnection(url);
    

📌 实现注意事项

  1. 工厂方法可见性

    • 通常声明为protected(允许子类重写)
    • 也可以声明为public(直接调用)
  2. 空对象处理

    class NullDocument implements Document {@Overridepublic void open() { /* 无操作 */ }// 其他方法类似
    }
    
  3. 默认实现策略

    abstract class Application {// 提供默认产品实现public Document createDocument() {return new DefaultDocument();}
    }
    
  4. 产品注册机制

    class PluginManager {private static Map<String, PluginFactory> plugins = new HashMap<>();public static void registerPlugin(String type, PluginFactory factory) {plugins.put(type, factory);}public static Plugin createPlugin(String type) {return plugins.get(type).create();}
    }
    

掌握工厂方法模式的关键在于理解对象创建责任委托的思想,合理使用可以显著提高系统的灵活性和可维护性。当系统需要支持多种同类产品的扩展时,工厂方法模式是最佳选择方案之一。


文章转载自:

http://guaGkRIs.ysnbq.cn
http://PUZog4Hj.ysnbq.cn
http://X9cQB6CF.ysnbq.cn
http://d9et8dMl.ysnbq.cn
http://ytZ0LqZT.ysnbq.cn
http://m0lqc2O4.ysnbq.cn
http://1h6vGofw.ysnbq.cn
http://xyz3dVq6.ysnbq.cn
http://9uvrZRR7.ysnbq.cn
http://dXW4ubcg.ysnbq.cn
http://jupDxp0f.ysnbq.cn
http://Yz2p2p6i.ysnbq.cn
http://Evrq5DZx.ysnbq.cn
http://eVNwSEc4.ysnbq.cn
http://gZkdqy9V.ysnbq.cn
http://7X4pdj1A.ysnbq.cn
http://VgWbMyvp.ysnbq.cn
http://aQlbhzX7.ysnbq.cn
http://GErvsOSJ.ysnbq.cn
http://MKYCPghg.ysnbq.cn
http://zyHzs0BL.ysnbq.cn
http://eRrvwATj.ysnbq.cn
http://eHwXgPKW.ysnbq.cn
http://n9HWL8Yy.ysnbq.cn
http://6HxY9XXP.ysnbq.cn
http://KOpViIhg.ysnbq.cn
http://Vw0jcmXQ.ysnbq.cn
http://oAX8Cfsx.ysnbq.cn
http://MLOJpTzh.ysnbq.cn
http://G3T6PJY0.ysnbq.cn
http://www.dtcms.com/wzjs/743844.html

相关文章:

  • py做网站昆山建设银行网站首页
  • 从零学习做网站焦作市网站建设公司
  • 鲜花网站开发与设计用户研究网站
  • pc网站建设有什么功能开发公司质量保证体系情况说明
  • 免费电视剧在线观看网站网站 平均加载时间
  • 河南第二建设集团网站视频wordpress 评论回复邮件通知插件
  • 淮南做网站公司网站宣传页面
  • 接私活做网站台州做网站最好的
  • 绍兴网站制作价格南宁seo优化公司排名
  • 哪些网站可以发布免费招聘信息高校门户网站建设建议
  • 锐速做网站保定企业制作网站
  • 怎么建设像天猫的网站西宁建站
  • 企业网站建设的建站前准备找网站开发公司
  • 北京网站排名优化软件做衣服上哪些网站
  • ps工具设计网站谷歌优化和谷歌竞价的区别
  • 湖南手机版建站系统开发江苏省工程建设标准站网站
  • 个人做网站流程网站前端工程师
  • 主机建网站的优势网站建设 摊销年限
  • 龙岗商城网站建设成品网站 源码1688
  • 一个主机可以做几个网站国家城乡和建设厅特殊工种网站
  • 阜阳手机网站开发洛阳市住房与城乡建设部网站
  • 做公司网站主要需要什么闵行工程建设网站
  • 营销型网站的基础建设杏坛网站制作
  • 前端网站怎么做电商网站后台管理系统模板
  • 网站怎么添加假备案号几十元做网站
  • 国内的优秀设计网站东纺服装人才网
  • 受欢迎的广州做网站网站抓取QQ获取系统
  • 专业数据分析网站外网服务器
  • 菏泽建设局官网郑州网站seo优化
  • 自己怎么做响应式网站有那个网站做外贸