抽象工厂模式设计原理
抽象工厂模式
属于创建模式,一个超级的工厂模式,简单来说就是用来创建工厂
的工厂模式。在抽象工厂模式中、可以使用多个工厂
去创建不同类型的实体类对象(比如动物的实体类、颜色的实体类)
。再创建一个抽象类去实现每一种接口类型实现类的创建方法(比如返回动物Animal对象,但里面存的是实现类Dog对象的内存地址
)。总之:抽象工厂模式就是在原来工厂模式的基础上在新添一层。
抽象工厂模式的设计原理图如下:
抽象工厂模式的设计流程
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)模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式