zoukankan      html  css  js  c++  java
  • 设计模式——工厂方法模式

    知识点:工厂方法模式创建对象

    (一)什么是工厂方法模式

    定义一个创建产品对象的工厂接口,子类工厂实现接口来创建具体的产品对象

    (二)角色

    抽象工厂:是工厂方法模式的核心,创建具体对象的的工厂类必须实现这个接口

    具体工厂:实现抽象工厂接口的具体工厂,用来创建具体产品对象

    抽象产品:具体产品对象拥有的共同父类或者接口

    具体产品:实现抽象产品的接口,包含了产品的具体细节

    产品使用者:使用产品者

    (三)代码实例

    //工厂方法设计模式
    public class FactoryMethodTest {
    public static void main(String[] args) {
    //创建某种工厂,创建对应的产品对象,执行产品对象中的doWork()方法
    PersonWorkFactory stuFac=new StudentWorkFactory();
    stuFac.getWorkClass().doWork();

    PersonWorkFactory teaFac=new TeacherWorkFactory();
    teaFac.getWorkClass().doWork();
    }
    }
    //抽象工厂
    interface PersonWorkFactory{
    Work getWorkClass();
    }
    //具体工厂,生产产品
    class StudentWorkFactory implements PersonWorkFactory{
    @Override
    public Work getWorkClass() {
    return new StudentWork();
    }
    }
    class TeacherWorkFactory implements PersonWorkFactory{
    @Override
    public Work getWorkClass() {
    return new TeacherWork();
    }
    }
    //抽象产品
    interface Work{
    void doWork();
    }
    //具体产品
    class StudentWork implements Work{

    @Override
    public void doWork() {
    System.out.println("学习!");
    }
    }
    class TeacherWork implements Work{
    @Override
    public void doWork() {
    System.out.println("教学生知识!");
    }
    }

    执行结果

    上面的核心工厂PersonWorkFactory不负责产品对象的创建工作,是一个抽象工厂的角色,只负责具体工厂子类实现的接口,这样抽象化的好处使得系统在不修改具体工厂角色的情况下,可以引进新的产品,遵循开闭原则,提高了系统的可扩展性。

    (四)优点
    (1)使用工厂方法创建具体产品对象,隐藏了具体对象的创建细节,只需要关心具体产品对应的工厂
    (2)遵循开闭原则,当加入新的产品类时,只需要同时加入相应的工厂类,实现扩展,无需修改原来的代码,提高了代码的可扩展性

    参考博客:https://www.cnblogs.com/chenxkang/p/6689631.html
    https://www.cnblogs.com/chenpi/p/5141376.html#_label3

  • 相关阅读:
    记Java程序Log4J漏洞的解决过程
    IIS中应用程序池自动停止,重启报错
    如何查看域名所对应的证书有效期?
    查看前端Vue版本命令
    WCF中常见的报错:The content type text
    dotnet 将自动代码格式化机器人带入团队 GitLab 平台
    WPF 引用第三方库的控件在设计器加上设计时数据和属性
    dotnet OpenXML 聊聊文本段落对齐方式
    WPF 布局 在有限空间内让两个元素尽可能撑开的例子
    dotnet 通过 DockerfileContext 解决项目放在里层文件夹导致 VisualStudio 构建失败
  • 原文地址:https://www.cnblogs.com/shuaifing/p/10844178.html
Copyright © 2011-2022 走看看