设计模式-创建型-抽象工厂模式

设计模式-创建型-抽象工厂模式

有点复杂。
一般的工厂模式下,每个实体类都需要一个对应的工厂,当实体类过多时工厂的数量也会变多。当实体类还有子类时,我们需要的工厂就更多了。
抽象工厂模式是将所有工厂的共性抽象出来

public interface AnimalFactory {
    Animal createDog();
    Animal createCat();
}
// 生产母狗和母猫
public class FemaleAnimalFactory implements AnimalFactory {
    @Override
    public Animal createDog() {
        return  new FemaleDog();
    }
    @Override
    public Animal createCat() {
        return new FemaleCat();
    }
}
// 生产公狗和公猫
public class MaleAnimalFactory implements AnimalFactory {
    @Override
    public Animal createDog() {
        return new MaleDog();
    }
    @Override
    public Animal createCat() {
        return new MaleCat();
    }
}

实体类

public abstract class Animal {
    // 所有的动物都会吃东西
    public abstract void eat();
    // 所有的动物都有性别
    public abstract void gender();
}
public abstract class Cat extends Animal {
    // 猫喜欢吃鱼
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public abstract class Dog extends Animal {
    // 狗喜欢吃肉
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
public class FemaleCat extends Cat {
    public void gender() {
        System.out.println("I am a female Cat");
    }
}

简单来说:工厂方法模式的工厂是创建出一种产品,而抽象工厂是创建出一类产品。

  • 一类的产品我们称之为产品族。
    • 猫是一类的,狗也是一类的。所以AnimalFactory定义了两类产品—>Animal createDog();和Animal createCat();
  • 产品的继承结构称之为产品等级。
    • 所有的狗都是会吃肉的,所以Dog实现了eat()方法
      • 狗又分成了公狗和母狗,所以定义了两个类FemaleDog和MaleDog继承了Dog,实现了gender()方法
    • 所有的猫都是会吃鱼的,所以Cat实现了eat()方法
      • 猫又分成了公猫和母猫,所以定义了两个类FemaleCat和MaleCat继承了Cat,实现了gender()方法
  • 具体的工厂是面向多个产品等级结构进行生产。
  • 所以FemaleAnimalFactory定义了createDog()和createCat()生产母狗和母猫
  • 所以MaleAnimalFactory定义了createDog()和createCat()生产公狗和共猫找到母工厂就可以创建母猫和母狗,找到公工厂就可以创建公猫和公狗

优点:

  • 多了一层抽象,减少了工厂数量

缺点:

  • 难以扩展
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值