工厂方法模式

工厂方法(FactoryMethod)模式是一种对象创建型模式

1.工厂方法模式的定义与特点

工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。
   我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。
   如果要创建的产品不多,只需要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它的缺点是新增产品时需要修改工厂方法,违背“开闭原则”
   “工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。

工厂方法模式的主要优点有:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

2.工厂方法模式的结构与实现

1.模式的结构
工厂方法模式的主要角色:

  1. 抽象工厂(AbstractFactory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品
  2. 具体工厂(Factory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建
  3. 抽象产品(AbstractProduct):定义了产品的规范,描述了产品的主要特性和功能
  4. 具体产品(Product):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

2.结构图
在这里插入图片描述
3.模式的实现
分析:使用工厂模式,实现不同手机的生产

代码示例:

public class FactoryMethodTest {
    public static void main(String[] args) {
        //简单工厂模式
        System.out.println("简单工厂模式:");
        MobileSimpleFactory simpleFactory = new MobileSimpleFactory();
        IMobile huaWeiMobile = simpleFactory.createMobile("HuaWei");
        huaWeiMobile.show();
        IMobile appleMobile = simpleFactory.createMobile("Apple");
        appleMobile.show();

        //工厂方法模式
        System.out.println("\n工厂方法模式:");
        IFactory huaWeiFactory = new HuaWeiFactory();
        IMobile huaWeiMobile2 = huaWeiFactory.createMobile();
        huaWeiMobile2.show();

        IFactory appleFactory = new AppleFactory();
        IMobile appleMobile2 = appleFactory.createMobile();
        appleMobile2.show();
    }
}

运行结果:

简单工厂模式:
手机工厂 --> 生产了一部华为手机
品牌:HuaWei
手机工厂 --> 生产了一部苹果手机
品牌:Apple

工厂方法模式:
华为手机工厂 --> 生产了一部华为手机
品牌:HuaWei
苹果手机工厂 --> 生产了一部苹果手机
品牌:Apple

手机相关实现类:

public interface IMobile {
    /**
     * 手机信息
     */
    void show();
}

/**
 * 华为手机
 */
public class HuaWeiMobile implements IMobile {
    @Override
    public void show() {
        System.out.println("品牌:HuaWei");
    }
}

/**
 * 苹果手机
 *
 */
public class AppleMobile implements IMobile {
    @Override
    public void show() {
        System.out.println("品牌:Apple");
    }
}

简单工厂实现类:

/**
 * 手机工厂
 */
public class MobileSimpleFactory {
    /**
     * 生成手机
     *
     * @param model 型号
     * @return
     */
    public IMobile createMobile(String model) {
        if (model.equalsIgnoreCase("HuaWei")) {
            System.out.println("手机工厂 --> 生产了一部华为手机");
            return new HuaWeiMobile();
        } else if (model.equalsIgnoreCase("Apple")) {
            System.out.println("手机工厂 --> 生产了一部苹果手机");
            return new AppleMobile();
        } else if (model.equalsIgnoreCase("Oppo")) {
            System.out.println("手机工厂 --> 生产了一部Oppo手机");
            return new OppoMobile();
        }
        return null;
    }
}

工厂方法模式实现类:

/**
 * 抽象手机工厂,提供手机的生产方法
 */
public interface IFactory {
    IMobile createMobile();
}

/**
 * 华为手机工厂
 */
public class HuaWeiFactory implements IFactory {
    @Override
    public IMobile createMobile() {
        System.out.println("华为手机工厂 --> 生产了一部华为手机");
        return new HuaWeiMobile();
    }
}

/**
 * 苹果手机工厂
 */
public class AppleFactory implements IFactory {
    @Override
    public IMobile createMobile() {
        System.out.println("苹果手机工厂 --> 生产了一部苹果手机");
        return new AppleMobile();
    }
}

Demo地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值