Java设计模式【三】:抽象工厂模式

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

写在前面

设计模式,其实在一定程度上代表着最优解,最佳实践,由一部分开发人员根据经验总结而出的解决方案,分别针对不同的场景的最优解决方案。

在当前环境下,设计模式也被开发人员极为推崇,并且利用其解决众多的问题,所以,学习设计模式刻不容缓。

下面我们就来看一下“抽象工厂模式”。

抽象工厂模式是围绕一个超级工厂来创建其他工厂,相等于在工厂模式基础上再次创建了一个工厂,用于统筹各个工厂的工厂。

同样也是创建型设计模式。

使用场景

在我们做系列操作时,可以使用抽象工厂模式,调用一个方法,使用同一个对象就可以执行内部一连串的操作。

优缺点

优点就是当执行一系列操作时,抽象工厂模式可以做到使用同一个对象就可以对系列操作进行执行。

缺点就是扩展起来比较复杂,需要在多个类中增加代码。

代码实现

第一步,声明接口

public interface Shape {
    void draw();
}
复制代码

第二步,实现接口。

public class Rectangle implements Shape {

    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }
}
复制代码
public class Square implements Shape {

    @Override
    public void draw() {
        System.out.println("Inside Square::draw() method.");
    }
}
复制代码

第三步,创建一个颜色接口。

public interface Color {
    void fill();
}
复制代码

第四步,创建颜色接口的实现类。

public class Red implements Color {

    @Override
    public void fill() {
        System.out.println("Inside Red::fill() method.");
    }
}
复制代码
public class Green implements Color {

    @Override
    public void fill() {
        System.out.println("Inside Green::fill() method.");
    }
}
复制代码

第五步,为形状类和颜色类创建相应的工厂抽象类。

public abstract class AbstractFactory {
    public abstract Color getColor(String color);
    public abstract Shape getShape(String shape) ;
}
复制代码

第六步,创建第五步的工厂类。

public class ShapeFactory extends AbstractFactory {

    @Override
    public Shape getShape(String shapeType){
        if(shapeType == null){
            return null;
        }
        if(shapeType.equalsIgnoreCase("CIRCLE")){
            return new Circle();
        } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
            return new Rectangle();
        }
        return null;
    }

    @Override
    public Color getColor(String color) {
        return null;
    }
}
复制代码

猜你喜欢

转载自juejin.im/post/7015894524803153956