首页 > 其他分享 >八:工厂方法模式:打造独特产品

八:工厂方法模式:打造独特产品

时间:2023-04-30 14:06:15浏览次数:24  
标签:代码 Character 模式 工厂 打造 方法 public 独特

a. 工厂方法模式的内涵

在一个多姿多彩的世界里,每个产品都有自己独特的魅力。如果我们想要创建这些产品,又该如何实现呢?这时候,工厂方法模式闪亮登场!工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建过程与客户端代码分离的方法。它通过定义一个接口,让子类来决定实例化哪一个具体的产品类,从而达到代码解耦和扩展的目的。

b. 实践出真知:工厂方法模式示例

我们来看一个简单的示例。假设我们正在开发一个游戏,游戏中有各种各样的角色,例如战士(Warrior)和法师(Mage)。我们首先定义一个角色接口:

public interface Character {
    void attack();
}

然后,我们为每个角色创建具体的实现类:

public class Warrior implements Character {
    @Override
    public void attack() {
        System.out.println("Warrior attacks with a sword!");
    }
}

public class Mage implements Character {
    @Override
    public void attack() {
        System.out.println("Mage attacks with a spell!");
    }
}

接下来,我们需要创建一个工厂接口来负责实例化具体的角色:

public interface CharacterFactory {
    Character createCharacter();
}

为每个角色实现具体的工厂类:

public class WarriorFactory implements CharacterFactory {
    @Override
    public Character createCharacter() {
        return new Warrior();
    }
}

public class MageFactory implements CharacterFactory {
    @Override
    public Character createCharacter() {
        return new Mage();
    }
}

现在,我们可以使用工厂类来创建角色,而不必关心具体角色的实现:

public class Main {
    public static void main(String[] args) {
        CharacterFactory warriorFactory = new WarriorFactory();
        Character warrior = warriorFactory.createCharacter();
        warrior.attack(); // 输出 "Warrior attacks with a sword!"

        CharacterFactory mageFactory = new MageFactory();
        Character mage = mageFactory.createCharacter();
        mage.attack(); // 输出 "Mage attacks with a spell!"
    }
}

c. 权衡优劣:工厂方法模式分析

工厂方法模式的优点:

1、代码解耦:客户端代码不再依赖于具体的产品类,只需要关心工厂接口。 2、易于扩展:如果需要增加新的产品类型,只需添加相应的具体工厂类即可,无需修改已有代码。

工厂方法模式的缺点:

1、类的数量增多:每个产品类型都需要一个具体的工厂类,导致类的数量增加。 2、客户端需要知道使用哪个工厂:尽管客户端不直接依赖于具体产品类,但它需要知道使用哪个工厂来创建相应的产品。

d. 工厂方法模式在开源框架中的应用

让我们以Spring框架为例,看看工厂方法模式在实际开源框架中是如何应用的。Spring框架广泛使用了工厂方法模式来创建和管理Bean。在Spring中,BeanFactory接口充当了工厂方法模式的工厂接口,它负责创建和管理Bean的生命周期。

public interface BeanFactory {
    Object getBean(String name) throws BeansException;
    //...其他方法省略
}

其中,getBean方法负责根据Bean的名称来创建相应的实例。在具体的实现类中,如DefaultListableBeanFactory,getBean方法会根据配置文件中的Bean定义信息来实例化Bean。

public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
        implements ConfigurableListableBeanFactory, BeanDefinitionRegistry {
    // ...其他代码省略

    @Override
    public Object getBean(String name) throws BeansException {
        return doGetBean(name, null, null);
    }

    // ...其他代码省略
}

通过Spring框架的这个例子,我们可以看到工厂方法模式在实际项目中的强大应用。它让代码更加灵活、易于扩展,同时也使得客户端代码更加简洁。 总结起来,工厂方法模式作为一种创建型设计模式,在许多场景下都能大显身手。它将对象的创建过程与客户端代码分离,降低了代码之间的耦合度,提高了代码的可维护性和可扩展性。然而,使用工厂方法模式也需要权衡其优缺点。当面临大量类和客户端需要知道使用哪个工厂时,要慎重考虑是否使用工厂方法模式。

标签:代码,Character,模式,工厂,打造,方法,public,独特
From: https://blog.51cto.com/u_13616584/6237846

相关文章

  • 九:抽象工厂模式:生产线的魅力
    a.抽象工厂模式揭秘想象一下,你走进了一家工厂,看到了各种各样的机器齐头并进,生产着不同的产品。这就是抽象工厂模式(AbstractFactoryPattern)所揭示的魅力。作为一种创建型设计模式,抽象工厂模式提供了一个统一的接口,用于创建一系列相关或依赖的对象,而不需要关心具体的类。b.亲身......
  • 4、产品打造 - 产品管理系列文章
    商业中最关键的是产品的开发与打造,如何能打造好产品呢?《产品心经》给你方法。产品经理是产品从无到有、从有到优的最主要负责人,主要的工作包括:用户需求与市场分析,提出差异化的需求解决方案,传递用户价值的市场渠道分析,成本和收入以及盈亏平衡点分析,需求分析与管理和产品交互设计,根......
  • 西门子成都工厂的DevSecOps实践
    大家好,我是Edison。4月15日,成都.NET线下技术沙龙活动中,我分享了一个主题《西门子成都工厂的DevSecOps实践》,向大家介绍了我们为什么要做DevSecOps以及我们目前是怎么做DevSecOps的。整个分享从Why-What-How的顺序讲解,基于我们目前正在使用的.NET6技术栈,我们也给出了一些参考......
  • Hexo + github 打造个人博客
    前两年开始用wordpress搭了一个网站,但服务器是在Linode上,之所以要放在Linode上,要从买的域名说起,因为我买的域名是fengzheng.pub,.pub是不允许备案的,所以不能解析到国内的服务器,例如阿里云上,所以只能部署在国外的服务器。但是由于网络方面的限制,导致网站访问速度一直不是很......
  • Python_Gooey和pyinstaller打造易用的工具
    Python沟通Python搭建GUI界面时,首选Gooey,然后PyQt5和Tkinter,Pyinstaller:--paths后接第三方模块的路径,多个路径直接用逗号分隔(英文逗号)-F后接源文件路径使用-F,只生成一个大的可执行文件--clean表示清理打包完成后的临时文件(可选,但建议写上)......
  • 如何基于AI智能技术打造智慧工厂大数据可视化管理平台​
    一、行业背景随着物联网、视频监控和人工智能等技术的快速发展和应用,利用先进技术加强信息管理和服务,是现代工厂信息化发展的新趋势。目前是传统工厂向智慧工厂转型的关键阶段,各工厂急需采用融合智能化和信息化的技术,打造集智能管理、智能生产、智能服务为一体的大数据可视化管理平......
  • 开源大数据可视化工具,企业打造高效办公新模式!
    在现代化办公环境中,做好数据资源管理,实现数字化办公,是大多数企业现下追求的梦想。采用开源大数据可视化工具可以帮助广大用户实现这一梦想。那么,什么是开源大数据可视化工具,又有什么功能和特点?本文就针对广大用户关心的问题做一个阐述和介绍,希望能给大家带来帮助。1、关于开源大......
  • 设计模式-工厂篇(1)
    意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例化延迟到其子类。适用性:当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个,并且......
  • Java设计模式-抽象工厂模式
    简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关的......
  • [AHK]用AutoHotkey面向对象实践“简单工厂模式”
    用面向对象编程实现一个计算器程序,要求输入两个数和运算符号,得到结果。“所有编程初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和运算符号,然后......