设计模式-抽象工厂模式

1.抽象工厂:工厂内定义创建一系列相关或者相互依赖的对象的接口(如农场工厂类提供创建食物和肥料产品对象接口),但不做具体实例的创建,具体实例交给具体工厂类去创建(如肉类食物、蔬菜类食物、动物类肥料、植物类肥料产品实例分别交由具体的动物处理工厂和植物处理工厂处理)

2.简单例子:

(1)首先目的是生产肉类食物、蔬菜类食物、动物类肥料、植物类肥料产品四种产品;

(2)但是为了解耦,易于扩展,我们不直接在农场(farm)中创建这些产品实例,而是向外传达农场有生产食物和肥料,具体肉类食物和肥料交给动物农场去生产,具体植物类食物和肥料交给植物农场去生产;

(3)简单代码例子:

  •   创建农场接口(接口中不创建具体的食物和肥料实例)
/**
 * @ClassName Farm
 * @Description 农场接口:可以生产食物,也可以生产肥料
 * @Author hs
 * @Date 2021/1/31 17:06
 * @Version 1.0
 */
public interface Farm {
    //生产食品
    Food productFood();
    //生产废料
    Feiliao productFeiliao();
}
  • 创建动物农场工厂类(负责创建具体的动物食物和动物肥料实例)
/**
 * @ClassName Animal
 * @Description 动物
 * @Author hs
 * @Date 2021/1/31 17:07
 * @Version 1.0
 */
public class Animal implements Farm{
    //生产食品
    @Override
    public Food productFood(){
        return new AnimalFood();
    }
    //生产废料
    @Override
    public Feiliao productFeiliao(){
        return new AnimalFeiliao();
    }
}
  • 创建植物农场类(负责创建具体的植物食物和植物肥料实例)
/**
 * @ClassName Plant
 * @Description 植物
 * @Author hs
 * @Date 2021/1/31 17:08
 * @Version 1.0
 */
public class Plant implements Farm{
    //生产食品
    @Override
    public Food productFood(){
        return new PlantFood();
    }
    //生产废料
    @Override
    public Feiliao productFeiliao(){
        return new PlantFeiliao();
    }
}
  • 简单测试(分别创建动物和植物工厂类,通过工程类创建具体的产品实例)
/**
 * @ClassName Test
 * @Description TODO
 * @Author hs
 * @Date 2021/2/1 23:17
 * @Version 1.0
 */
public class Test {
    public static void main(String[] args) {
        Animal animal =new Animal();
        Plant plant = new Plant();
        animal.productFeiliao().mai();
        animal.productFood().chi();
        plant.productFeiliao().shifei();
        plant.productFood().mai();
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值