设计模式—抽象工厂模式
一、案例
管理多个工厂。
二、模型
三、代码实现
- Color、Shape接口
package com.wk.designPatterns.abstractFactoryPattern.entity;
public interface Color {
void fill();
}
package com.wk.designPatterns.abstractFactoryPattern.entity;
public interface Shape {
void draw();
}
- 接口实现类
package com.wk.designPatterns.abstractFactoryPattern.entity;
public class Blue implements Color {
@Override
public void fill() {
System.out.println("Blue.fill");
}
}
package com.wk.designPatterns.abstractFactoryPattern.entity;
public class Green implements Color {
@Override
public void fill() {
System.out.println("Green.fill");
}
}
package com.wk.designPatterns.abstractFactoryPattern.entity;
public class Red implements Color {
@Override
public void fill() {
System.out.println("Red.fill");
}
}
package com.wk.designPatterns.abstractFactoryPattern.entity;
public class Circle implements Shape {
public void draw(){
System.out.println("Circle.draw");
}
}
package com.wk.designPatterns.abstractFactoryPattern.entity;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square.draw");
}
}
package com.wk.designPatterns.abstractFactoryPattern.entity;
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("Triangle.draw");
}
}
- 抽象工厂
package com.wk.designPatterns.abstractFactoryPattern;
import com.wk.designPatterns.abstractFactoryPattern.entity.Color;
import com.wk.designPatterns.abstractFactoryPattern.entity.Shape;
public interface AbstractFactory {
public Shape getShape(String shape);
public Color getColor(String color);
}
- 具体工厂
package com.wk.designPatterns.abstractFactoryPattern;
import com.wk.designPatterns.abstractFactoryPattern.entity.*;
public class ShapeFactory implements AbstractFactory {
@Override
public Shape getShape(String shape) {
if (shape == null) {
return null;
}
//如果shape为circle,返回circle对象
if (shape.equalsIgnoreCase("circle")){
return new Circle();
}
//如果shape为triangle,返回triangle对象
if (shape.equalsIgnoreCase("triangle")){
return new Triangle();
}
//如果shape为square,返回square对象
if (shape.equalsIgnoreCase("square")){
return new Square();
}
return null;
}
@Override
public Color getColor(String color) {
return null;
}
}
--------------------------------
package com.wk.designPatterns.abstractFactoryPattern;
import com.wk.designPatterns.abstractFactoryPattern.entity.*;
public class ShapeFactory implements AbstractFactory {
@Override
public Shape getShape(String shape) {
if (shape == null) {
return null;
}
//如果shape为circle,返回circle对象
if (shape.equalsIgnoreCase("circle")){
return new Circle();
}
//如果shape为triangle,返回triangle对象
if (shape.equalsIgnoreCase("triangle")){
return new Triangle();
}
//如果shape为square,返回square对象
if (shape.equalsIgnoreCase("square")){
return new Square();
}
return null;
}
@Override
public Color getColor(String color) {
return null;
}
}
- 工厂的工厂
package com.wk.designPatterns.abstractFactoryPattern;
//工厂制造商,制造工厂的工厂
public class FactoryProducer {
public static AbstractFactory getFactory(String choice){
if (choice == null) {
return null;
}
if (choice.equalsIgnoreCase("shape")){
return new ShapeFactory();
}
if (choice.equalsIgnoreCase("color")){
return new ColorFactory() ;
}
return null;
}
}
- 测试类
public class test {
public static void main(String[] args) {
//图形工厂
AbstractFactory shapeFactory = FactoryProducer.getFactory("shape");
Shape circle = shapeFactory.getShape("circle");
circle.draw();
Shape triangle = shapeFactory.getShape("triangle");
triangle.draw();
Shape square = shapeFactory.getShape("square");
square.draw();
//颜色工厂
AbstractFactory colorFactory = FactoryProducer.getFactory("color");
Color red = colorFactory.getColor("red");
red.fill();
Color green = colorFactory.getColor("green");
green.fill();
Color blue = colorFactory.getColor("blue");
blue.fill();
}
}
运行结果: