工厂方法(Factory Method)

前言:工厂方法模式通过抽象工厂类约定了一个创建对象的接口,并由抽象工厂的子类决定实际生产的对象。

栗子

工厂方法类图

场景描述

一家企业特别热衷于生产事物,就通过抽象类的形式(FoodFactory)约定了将来子孙创建工厂时必须遵循的模式,即每个子工厂都必须生产食物(Food),但是子工厂可以根据自己的喜好来决定生产的具体产品,如BeerFactory比较热衷于啤酒生产, FriedChickenFactory热衷于炸鸡。

程序语言

食物类

//食物类
public class Food {
}
//啤酒类
public class Beer extends Food {
    public Beer() {
        System.out.println("啤酒");
    }
}
//炸鸡类
public class FriedChicken extends Food {
    public FriedChicken() {
        System.out.println("炸鸡");
    }
}

父工厂类

//约定了子孙工厂类都要生产食物(Food)
public abstract class FoodFactory {
    public abstract Food produceFood();
}

子工厂类

//炸鸡工厂
public class FriedChickenFactory extends FoodFactory {
    @Override
    public FriedChicken produceFood() {
        return new FriedChicken();
    }
}
//啤酒工厂
public class BeerFactory extends FoodFactory {
    @Override
    public Beer produceFood() {
        return new Beer();
    }
}

客户端

public class Main {
    public static void main(String[] args) {
        FoodFactory foodFactory = new BeerFactory();
        Food beer = foodFactory.produceFood();

        foodFactory = new FriedChickenFactory();
        Food chicken = foodFactory.produceFood();
    }
}

效果

1、父工厂类约定了子工厂类必须遵守的模型,适合用于生产一类商品,并且每个商品类一般单独使用。如啤酒、炸鸡同属于食物,但是可以拿来单独销售。
2、工厂方法便于扩展,当需要增加新的商品类时,只需要增加对应的工厂类即可。
3、类较多,每增加一个商品,都需要增加一个对应的工厂类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值