前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java工厂方法模式

java工厂方法模式

原创
作者头像
堕落飞鸟
发布2023-04-04 07:05:10
2760
发布2023-04-04 07:05:10
举报
文章被收录于专栏:飞鸟的专栏

工厂方法模式是一种创建型设计模式,它提供了一种创建对象的接口,但是让子类决定实例化哪个类。在工厂方法模式中,创建对象的代码被移到工厂类中,从而提高了代码的可重用性和扩展性。

工厂方法模式的核心思想是定义一个用于创建对象的接口,但是让子类决定实例化哪个类。这个模式的基本结构包括三个角色:抽象工厂、具体工厂和抽象产品。具体产品则由具体工厂创建。

抽象工厂是工厂方法模式的核心,它是一个接口,定义了用于创建产品的方法。具体工厂实现了抽象工厂,负责创建具体的产品。抽象产品是工厂方法模式创建的产品的接口,它定义了产品的属性和行为。

工厂方法模式的优点在于它将对象的创建过程抽象出来,使得代码更具可读性和可维护性。同时,它也让代码更加灵活,可以根据需要添加新的产品类。

下面给出一个不需要写抽象工厂的工厂方法模式的示例。

假设我们正在开发一个游戏,游戏中有两种角色:战士和法师。我们希望根据不同的角色类型来创建不同的角色对象。

首先,我们定义一个角色类Role,它有一个方法display()来展示角色的信息:

代码语言:javascript
复制
public abstract class Role {
    public abstract void display();
}

然后,我们创建两个具体的角色类Warrior和Magician,它们都继承自Role,并实现了display()方法。

代码语言:javascript
复制
public class Warrior extends Role {
    @Override
    public void display() {
        System.out.println("This is a warrior.");
    }
}

public class Magician extends Role {
    @Override
    public void display() {
        System.out.println("This is a magician.");
    }
}

接下来,我们定义一个工厂类RoleFactory,它有一个方法createRole()来创建不同的角色对象。

代码语言:javascript
复制
public class RoleFactory {
    public static Role createRole(String type) {
        if (type.equalsIgnoreCase("warrior")) {
            return new Warrior();
        } else if (type.equalsIgnoreCase("magician")) {
            return new Magician();
        } else {
            throw new IllegalArgumentException("Invalid role type: " + type);
        }
    }
}

最后,我们可以在客户端代码中使用RoleFactory来创建角色对象。

代码语言:javascript
复制
public class Client {
    public static void main(String[] args) {
        Role role1 = RoleFactory.createRole("warrior");
        role1.display();
        
        Role role2 = RoleFactory.createRole("magician");
        role2.display();
    }
}

在这个示例中,我们通过工厂方法模式来创建角色对象。我们不需要写抽象工厂,而是直接调用静态方法createRole()来创建具体的角色对象。根据传入的参数,工厂类会创建不同的角色对象并返回给客户端代码使用。

需要注意的是,在这个示例中,我们使用了静态方法来创建角色对象,这不符合工厂方法模式的标准实现方式。标准实现方式应该是创建一个抽象工厂类来定义创建产品的接口,然后创建具体的工厂类来实现这个接口,并在工厂类中实现创建具体产品的方法。但是在一些简单的应用场景中,我们可以使用静态方法来简化代码实现。

工厂方法模式的示例不限于创建角色对象,它可以应用于各种场景,例如创建数据库连接、创建文件读写流等。无论是何种场景,工厂方法模式都可以将对象的创建过程抽象出来,提高代码的可维护性和可重用性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档