抽象工厂模式

一、抽象工厂模式的诞生

之前我们的工厂方法模式,只能针对一个类型的产品来进行操作,比如说只能生产苹果手机,但是无法生产小米或者华为其他品牌的手机因为工厂模式是对象都实现了同一个接口为了解决这个问题,我们就需要使用抽象工厂方法了。

二、什么是抽象工厂方

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

 

 三、抽象工厂模式和工厂模式对比

抽象工厂模式的工厂可以创建多个相关的产品对象,后者只能创建一个产品对象。

四、抽象工厂模式的优缺点

优点:

1.分离了具体的类

2.易于交换产品系列

3.有利于产品的一致性

缺点:

产品族本身的扩展非常困难

也就是说:现在需要加入一个新的产品功能,工厂父接口需要更改,下面的所有子类也都需要更改。

五、抽象工厂模式的实现

1.创建产品抽象接口

public interface Size {
public void getSize();
}

  

2.创建产品实现类

public class HuaWeiMate10Size implements Size{
    @Override
    public void getSize() {
        System.out.println("HuaWeiMate10Size");
    }
}

  

public class IphoneXRSize implements Size{
    @Override
    public void getSize() {
        System.out.println("IphoneXRSize");
    }
}

  

public class IphoneXSize implements Size{
    @Override
    public void getSize() {
        System.out.println("IphoneXSize");
    }
}

  

public class XiaoMi8Size implements Size{
    @Override
    public void getSize() {
        System.out.println("XiaoMi8Size");
    }
}

  

3.创建父工厂接口

public abstract class AbstractFactory {
    abstract Size getSize();//这里并不需要指明到底是哪个具体产品,运用了多态
}

  

4.创建工厂的实现子类

public class HuaWeiMate10Factory extends AbstractFactory{
    @Override
    Size getSize() {
        return new HuaWeiMate10Size();
    }
}

  

public class IphoneXFactory extends AbstractFactory{
    @Override
    Size getSize() {
        return new IphoneXSize();
    }
}

  

public class IphoneXRFactory extends AbstractFactory{
    @Override
    Size getSize() {
        return new IphoneXRSize();
    }
}

  

public class XiaoMi8Factory extends AbstractFactory{
    @Override
    Size getSize() {
        return new XiaoMi8Size();
    }
}

  

5.测试

public class Test {
    public static void main(String[] args) {
        HuaWeiMate10Factory huaWeiMate10Factory = new HuaWeiMate10Factory();
        huaWeiMate10Factory.getSize();
    }
}

  

六、总结

总结:工厂模式与抽象工厂模式都属于创建型模式,在工厂模式中弥补了简单工厂模式的缺陷(不符合开闭原则),而在抽象工厂模式中弥补了工厂模式的不足(一个工厂只能生产一种产品)。

 

posted @ 2021-01-22 16:10  Yaoyaoo  阅读(139)  评论(0)    收藏  举报