每天一个设计模式之抽象工厂模式

抽象工厂模式设计原理

抽象工厂模式属于创建模式,一个超级的工厂模式,简单来说就是用来创建工厂的工厂模式。在抽象工厂模式中、可以使用多个工厂去创建不同类型的实体类对象(比如动物的实体类、颜色的实体类)。再创建一个抽象类去实现每一种接口类型实现类的创建方法(比如返回动物Animal对象,但里面存的是实现类Dog对象的内存地址)。总之:抽象工厂模式就是在原来工厂模式的基础上在新添一层。

抽象工厂模式的设计原理图如下:
AbstractFactory设计模式

抽象工厂模式的设计流程

1、创建多个接口去描述多个抽象事物,并为实现类提供方法模板
  • 动物Animal类型
public interface Animal {
    void eat();
}
  • 颜色Color类型
public interface Color {
    void fill();
}
2、为接口提供实现类
  • 动物Animal类型
public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println(" Dog implements Animal");
    }
}
public class Cat implements Animal {
    @Override
    public void eat() {
        System.out.println(" Cat implements Animal");
    }
}
public class Bird implements Animal {
    @Override
    public void eat() {
        System.out.println(" Bird implements Animal");
    }
}
  • 颜色Color类型
public class Red implements Color{
    @Override
    public void fill() {
        System.out.println(" This is Red Implements Color");
    }
}
public class Blue implements Color{
    @Override
    public void fill() {
        System.out.println(" This is Blue implements Color");
    }
}
public class Green implements Color{
    @Override
    public void fill() {
        System.out.println(" This is Green Implements Color");
    }
}
3、创建抽象类工厂,去提供获得动物接口实现和颜色接口实现类的方法
  • 抽象工厂类AbstractFactory
public abstract class AbstractFactory {
    public abstract Animal getAnimal(String animal);
    public abstract Color getColor(String color);
}
4、创建每一个接口所对应的工厂类,并重写抽象工厂类中的抽象方法
  • 动物工厂AnimalFactory类型
public class AnimalFactory extends AbstractFactory{
    @Override
    public Animal getAnimal(String animal) {
        if (animal == null){
            return null;
        }
        if (animal.equalsIgnoreCase("Dog")){
            return new Dog();
        } else if (animal.equalsIgnoreCase("Cat")) {
            return new Cat();
        } else if (animal.equalsIgnoreCase("Bird")) {
            return new Bird();
        }
        return null;
    }

    @Override
    public Color getColor(String color) {
        return null;
    }
}
  • 颜色工厂ColorFactory类型
public class ColorFactory  extends AbstractFactory{
    @Override
    public Animal getAnimal(String shape) {
        return null;
    }

    @Override
    public Color getColor(String color) {
        if (color==null){
            return null;
        }
        if (color.equalsIgnoreCase("Red")){
            return new Red();
        } else if (color.equalsIgnoreCase("Blue")) {
            return new Blue();
        } else if (color.equalsIgnoreCase("Green")) {
            return new Green();
        }
        return null;
    }
}
5、提供一个工厂建造类,用来获取抽象工厂的多态形式子类
  • 工厂建造AbstractFactoryBuilder类型
public class AbstractFactoryBuilder {
    public static AbstractFactory getAbstractFactory(String factory){
        if (factory.equalsIgnoreCase("Animal")){
            return new AnimalFactory();
        }
        if (factory.equalsIgnoreCase("color")){
            return new ColorFactory();
        }
        return null;
    }
}
6、在Main方法中进行测试
  • 代码如下:
public class AbstractFactoryTest {
    public static void main(String[] args) {
        Animal animal = AbstractFactoryBuilder.getAbstractFactory("animal").getAnimal("Dog");
        animal.eat();

        AbstractFactoryBuilder.getAbstractFactory("animal").getAnimal("Cat").eat();

        AbstractFactory factory = AbstractFactoryBuilder.getAbstractFactory("animal");
        Animal bird = factory.getAnimal("Bird");
        bird.eat();

        AbstractFactory colorFactory = AbstractFactoryBuilder.getAbstractFactory("Color");
        Color red = colorFactory.getColor("RED");
        red.fill();

        Color color = AbstractFactoryBuilder.getAbstractFactory("Color").getColor("Blue");
        color.fill();

        AbstractFactoryBuilder.getAbstractFactory("Color").getColor("Green").fill();
    }
}
  • 结果
    抽象工厂模式结果

  • 创造设计模式

工厂模式、抽象工厂模式、单例模式、原型模式、Builder模式

  • 结构设计模式

适配器(Adapter)模式、桥接(Bridge)模式、组合模式、装饰者(Decorator)模式、外观(Facade)模式、享元(Flyweight)模式、代理(Proxy)模式

  • 行为设计模式

责任链模式、命令模式、解释器模式、迭代器模式、调解者(Mediator)模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑妖问路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值