您的位置:首页 > 编程语言 > Java开发

Java抽象工厂模式

2017-09-22 16:33 211 查看
抽象工厂模式是一个超级工厂,用来创建其他工厂。 这个工厂也被称为工厂的工厂。 这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。在抽象工厂模式中,接口负责创建相关对象的工厂,而不明确指定它们的类。 每个生成的工厂可以按照工厂模式提供对象。

实现实例

我们将创建一个
Shape
Color
接口并实现这些接口的具体类。在下一步中,将创建一个抽象工厂类
AbstractFactory
。在每个工厂类
ShapeFactory
ColorFactory
定义都是扩展自
AbstractFactory
。创建工厂创建者/生成器类 -
FactoryProducer
AbstractFactoryPatternDemo
这是一个演示类,使用
FactoryProducer
来获取
AbstractFactory
对象。 它会将信息(
CIRCLE
/
RECTANGLE
/
SQUARE
)传递给
AbstractFactory
以获取所需的对象类型。 它还将信息(用于
Color
RED
/
GREEN
/
BLUE
)传递给
AbstractFactory
以获取所需的对象类型。

第1步

创建
Shape
的接口。Shape.java
public interface Shape {
void draw();
}
Java

第2步

创建实现相同接口的具体类。Rectangle.java
public class Rectangle implements Shape {

@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
JavaSquare.java
public class Square implements Shape {

@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
JavaCircle.java
public class Circle implements Shape {

@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
Java

第3步

创建一个
Colors
接口,如下所示Color.java
public interface Color {
void fill();
}
Java

第4步

创建实现相同接口的具体类。
public class Red implements Color {

@Override
public void fill() {
System.out.println("Inside Red::fill() method.");
}
}
JavaGreen.java
public class Green implements Color {

@Override
public void fill() {
System.out.println("Inside Green::fill() method.");
}
}
JavaBlue.java
public class Blue implements Color {

@Override
public void fill() {
System.out.println("Inside Blue::fill() method.");
}
}
Java

第5步

创建实现相同接口的具体类。AbstractFactory.java
public abstract class AbstractFactory {
abstract Color getColor(String color);
abstract Shape getShape(String shape) ;
}
Java

第6步

创建实现相同接口的具体类。创建工厂类,根据给定信息扩展
AbstractFactory
以生成具体类的对象。ShapeFactory.java
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();

}else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}

return null;
}

@Override
Color getColor(String color) {
return null;
}
}

ColorFactory.java
public class ColorFactory extends AbstractFactory {

@Override
public Shape getShape(String shapeType){
return null;
}

@Override
Color getColor(String color) {

if(color == null){
return null;
}

if(color.equalsIgnoreCase("RED")){
return new Red();

}else if(color.equalsIgnoreCase("GREEN")){
return new Green();

}else if(color.equalsIgnoreCase("BLUE")){
return new Blue();
}

return null;
}
}
[/code]Java

第7步

创建工厂生成器/生产器类,通过传递如
Shape
Color
等信息来获取工厂FactoryProducer.java
public
class FactoryProducer
{ public static AbstractFactory
getFactory(String choice){
if(choice.equalsIgnoreCase("SHAPE")){
return new
ShapeFactory();
}else
if(choice.equalsIgnoreCase("COLOR")){
return new
ColorFactory();
} return null;
}}
Java

第8步

使用
FactoryProducer
来获取
AbstractFactory
,以便通过传递类型等信息来获取具体类的工厂。
AbstractFactoryPatternDemo.java
public
class AbstractFactoryPatternDemo
{ public static
void main(String[] args)
{ //get shape factory AbstractFactory shapeFactory
= FactoryProducer.getFactory("SHAPE");
//get an object of Shape Circle Shape shape1
= shapeFactory.getShape("CIRCLE");
//call draw method of Shape Circle shape1.draw();
//get an object of Shape Rectangle Shape shape2
= shapeFactory.getShape("RECTANGLE");
//call draw method of Shape Rectangle shape2.draw();
//get an object of Shape Square Shape shape3
= shapeFactory.getShape("SQUARE");
//call draw method of Shape Square shape3.draw();
//get color factory AbstractFactory colorFactory
= FactoryProducer.getFactory("COLOR");
//get an object of Color Red Color color1
= colorFactory.getColor("RED");
//call fill method of Red color1.fill();
//get an object of Color Green Color color2
= colorFactory.getColor("Green");
//call fill method of Green color2.fill();
//get an object of Color Blue Color color3
= colorFactory.getColor("BLUE");
//call fill method of Color Blue color3.fill();
}}
Java

第9步

验证输出,结果如下 -
Inside Circle::draw() method.Inside
Rectangle::draw() method.Inside
Square::draw() method.Inside Red::fill()
method.Inside Green::fill() method.Inside
Blue::fill() method.

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: