抽象工厂模式
文件分为:
- AbstractFactory,ShapeFactory,ColorFactory
- Shape,Color
- Triangle,Square,Rectangle
- Red
部分代码没有贴出
AbstractFactory:
public abstract class abstractFctory {
abstract Color getColor(String color);
abstract Shape getsShape(String shape);
}
ShapeFactory:
public class ShapeFactory extends abstractFctory{
@Override
Color getColor(String color) {
return null;
}
@Override
Shape getsShape(String shape) {
if(shape == null){
return null;
}
if(shape.equalsIgnoreCase("TRIANGLE")){
return new Triangle();
} else if(shape.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shape.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
ColorFactory:
public class ColorFactory extends abstractFctory{
@Override
Color getColor(String color) {
if(color==null)
return null;
else if(color.equalsIgnoreCase("RED"))
return new Red();
return null;
}
@Override
Shape getsShape(String shape) {
// TODO 自动生成的方法存根
return null;
}
}
FactoryProducer:
这个是重点,这里开始是与工厂模式不同的地方
public class FactoryPeoducer {
public static abstractFctory getFctory(String factory){
if(factory.equalsIgnoreCase("SHAPE"))
return new ShapeFactory();
else if(factory.equalsIgnoreCase("COLOR"))
return new ColorFactory();
return null;
}
}
测试代码:
public class MainDemo {
public static void main(String[] args) {
abstractFctory shapeFactory = FactoryPeoducer.getFctory("SHAPE");
Shape shape = shapeFactory.getsShape("TRIANGLE");
shape.draw();
abstractFctory colorFctory = FactoryPeoducer.getFctory("COLOR");
Color red = colorFctory.getColor("RED");
red.fill();
}
}
输出:
Triangle
color:red
理解:抽象工厂模式是对工厂模式的一个拓展,使其更加灵活,但是繁琐的一个地方是要构建相应的子类去实现接口,代码繁琐。要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。