(四)构建型模式-抽象工厂模式

itmahy
itmahy
发布于 2024-01-19 / 28 阅读
0
0

(四)构建型模式-抽象工厂模式

抽象工厂模式

工厂方法模式可以进一步优化,提取出工厂接口。

/**
 * @Author: mahy
 * @Contact: [email protected]
 * @Date: 2022-03-07 15:20
 * @Description: 动物工厂接口
 */
public interface AniFactory {
​
    /**
     * 创建动物
     * @return
     */
    Animal create();
}
/**
 * @Author: mahy
 * @Contact: [email protected]
 * @Date: 2022-03-07 15:11
 * @Description: 猫实现动物接口的实现类
 */
public class CatFactory implements AniFactory{
​
    @Override
    public Animal create(){
        return  new Cat();
    }
}
/**
 * @Author: mahy
 * @Contact: [email protected]
 * @Date: 2022-03-07 15:10
 * @Description: 狗实现动物接口的实现类
 */
public class DogFactory implements AniFactory{
​
    @Override
    public Animal create(){
        return new Dog();
    }
}
/**
 * @Author: mahy
 * @Contact: [email protected]
 * @Date: 2022-03-07 14:02
 * @Description: 测试抽象工厂方法
 */
public class Test001 {
​
    public static void main(String[] args) {
        AniFactory catFactory = new CatFactory();
        Animal cat = catFactory.create();
        AniFactory dogFactory = new DogFactory();
        Animal dog = dogFactory.create();
        String dogSleep = dog.sleep();
        String catSleep = cat.sleep();
        System.out.println(dogSleep); //狗在睡觉
        System.out.println(catSleep); //猫在睡觉
    }
}

可以看到,我们在创建时指定了具体的工厂类后,在使用时就无需再关心是哪个工厂类,只需要将此工厂当作抽象的 AniFactory 接口使用即可。这种经过抽象的工厂方法模式被称作抽象工厂模式。

抽象工厂模式很好的发挥了开闭原则、依赖倒置原则,但缺点是抽象工厂模式太重了,如果 AniFactory接口需要新增功能,则会影响到所有的具体工厂类。使用抽象工厂模式,替换具体工厂时只需更改一行代码,但要新增抽象方法则需要修改所有的具体工厂类。所以抽象工厂模式适用于增加同类工厂这样的横向扩展需求,不适合新增功能这样的纵向扩展。



评论