个人认为比起文字解释,用类图、代码和运行结果更能了解和感受设计模式的思想。

简单工厂模式

public interface Shape {
    void draw();
}

public class Triangle implements  Shape {

    @Override
    public void draw() {
        System.out.println("draw Triangle");
    }
}

public class Circle implements Shape {

    @Override
    public void draw() {
        System.out.println("draw circle");
    }
}

public class ShapeFactory {
    public static String CIRCLE = "circle";
    public static String TRIANGLE = "triangle";

    public static Shape createShape(String name) {
        Shape shape = null;
        Optional<String> nameOption = Optional.ofNullable(name);
        if (nameOption.isPresent()) {
            switch (nameOption.get()) {
                case "circle":
                    shape = new Circle();
                    break;
                case "triangle":
                    shape = new Triangle();
                    break;
                default:
                    break;
            }
        }
        return shape;
    }
}

@SpringBootTest
public class PatternTest {

    @Test
    public void createShapeTest() {
        Shape circle = ShapeFactory.createShape(ShapeFactory.CIRCLE);
        circle.draw();
        Shape triangle = ShapeFactory.createShape(ShapeFactory.TRIANGLE);
        triangle.draw();
    }
}

工厂方法模式

 

public interface ShapeFactory {
    Shape createShape();
}

public class CircleFactory implements ShapeFactory{
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

public class TriangleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Triangle();
    }
}

@Test
public void factoryTest() {
    ShapeFactory circleFactory = new CircleFactory();
    Shape circle = circleFactory.createShape();
    circle.draw();
    ShapeFactory triangleFactory = new TriangleFactory();
    Shape triangle = triangleFactory.createShape();
    triangle.draw();
}

抽象工厂模式

public interface Color {
    void paint();
}

public class Red implements Color {
    @Override
    public void paint() {
        System.out.println("paint red");
    }
}

public class White implements Color {
    @Override
    public void paint() {
        System.out.println("paint white");
    }
}

public interface ShapeColorFactory {
    Shape createShape();
    Color createColor();
}

public class RedCircleFactory implements ShapeColorFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }

    @Override
    public Color createColor() {
        return new Red();
    }
}

工厂的作用

10-03 09:34