设计模式:Simple Method--简单工厂模式

本文深入讲解了简单工厂模式,一种创建型设计模式,通过定义一个专门的类来负责创建其他类的实例。文章详细介绍了模式中的核心角色,包括工厂角色、抽象产品角色和具体产品角色,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂模式:

简单工厂模式属于创建型模式,又叫做静态工厂方法模式,通过专门定义一个类来负责创建其他类的实例。被创建的实例通常都具有相同的父类

关系图:工厂角色creator就是SendFactory接口,抽象角色productSender,具体产品concrete product是MailSend和SmsSend

  • 工厂角色creator

简单工厂模式的核心,它负责实现创建所有实例内部逻辑,工厂类可以被外界直接调用,创建所需要的产品对象

  • 抽象角色product

简单工厂模式创建的所欲对象的父类,负责描述所有实例共同的接口

  • 具体产品concrete product

简单工厂模式创建的具体实例对象

//苹果类 
class Apple implements Fruit{
    public void get(){
        System.out.println("采集苹果");
    }
}

**************************************************
//香蕉类
class Banana implements Fruit{
    public void get(){
        System.out.println("采集香蕉");
    }
}
**************************************************
//水果接口
interface Fruit {
    void get();
}
package com.atguigu.designPatterns.SimpleFactory;

/**
 * 简单工厂模式:
 *
 * 工厂角色creator
 * 简单工厂模式的核心,它负责实现创建所有实例内部逻辑,工厂类可以被外界直接调用,创建所需要的产品对象
 *
 * 抽象角色product
 * 简单工厂模式创建的所欲对象的父类,负责描述所有实例共同的接口
 *
 * 具体产品concrete product
 * 简单工厂模式创建的具体实例对象
 */
public class FruitFactory {
    //方式一
   /* public static Apple getApple() {
        return new Apple();
    }

    public static Banana getBanana() {
        return new Banana();
    }*/


    /**
     * //方式二
     * 获取所有产品的对象:动态获取
     * @param type
     * @return
     */
    public static Fruit getFruit(String type) throws Exception {

        if(type.equalsIgnoreCase("apple")) {
            return Apple.class.newInstance();
        }else if(type.equalsIgnoreCase("banana")) {
            return Banana.class.newInstance();
        }else {
            System.out.println("没有找到需要的对象");
            return null;
        }
    }

    //方式三
    public static Fruit getFruited (String type) throws Exception {
        Class<?> cls = Class.forName(type);
        Fruit fruit = (Fruit) cls.newInstance();
        return fruit;


    }


}

测试:

public class MainClass {
    public static void main(String[] args) throws Exception {
        //方式一
//        Apple apple = FruitFactory.getApple();
//        Banana banana = FruitFactory.getBanana();
//        apple.get();
//        banana.get();
        //方式二
        Fruit apple = FruitFactory.getFruit("apple");
        Fruit banana = FruitFactory.getFruit("banana");
        apple.get();
        banana.get();

        System.out.println("  ");
        //方式三
        Fruit apple1 = FruitFactory.getFruited("com.atguigu.designPatterns.SimpleFactory.Apple");
        Fruit banana1 = FruitFactory.getFruited("com.atguigu.designPatterns.SimpleFactory.Banana");
        apple1.get();
        banana1.get();
    }
}

测试结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值