写在前面
设计模式,其实在一定程度上代表着最优解,最佳实践,由一部分开发人员根据经验总结而出的解决方案,分别针对不同的场景的最优解决方案。
在当前环境下,设计模式也被开发人员极为推崇,并且利用其解决众多的问题,所以,学习设计模式刻不容缓。
下面我们就来看一下“抽象工厂模式”。
抽象工厂模式是围绕一个超级工厂来创建其他工厂,相等于在工厂模式基础上再次创建了一个工厂,用于统筹各个工厂的工厂。
同样也是创建型设计模式。
使用场景
在我们做系列操作时,可以使用抽象工厂模式,调用一个方法,使用同一个对象就可以执行内部一连串的操作。
优缺点
优点就是当执行一系列操作时,抽象工厂模式可以做到使用同一个对象就可以对系列操作进行执行。
缺点就是扩展起来比较复杂,需要在多个类中增加代码。
代码实现
第一步,声明接口
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; } }