STEPHEN的专栏

The Best Guides always come from the Official Website.

Creational Patterns Part 1/5: Factory Pattern

Creational Patterns Part 1/5: Factory Pattern

目录


Definition

Factory Pattern是Java中最常用的设计模式之一。这个模式属于Creational Patterns的原因就是它会Create一个对象。

何时使用?当希望使用统一的接口创建不同的实现类对象并且对用户隐藏对象的创建逻辑时。

使用频率:Frequency of use High


UML Class Diagram

Factory Pattern


Implementation

Shape接口,含有draw()方法。
创建Shape接口的实现类(Circle, Square和Rectangle)就可以交给ShapeFactory来实现。


// Shape.java
package designpatterns.creationalpatterns.factory;

public interface Shape {
    void draw();
}

// FactoryDemo.java
package designpatterns.creationalpatterns.factory;

public class FactoryDemo {
    public static void main(String[] args) {
        ShapeFactory factory = new ShapeFactory();

        Shape shape = factory.getShape("circle");
        shape.draw();

        shape = factory.getShape("square");
        shape.draw();

        shape = factory.getShape("rectangle");
        shape.draw();
    }
}

class ShapeFactory {

    Shape getShape(String shapeType) {
        if (shapeType == null)  return null;

        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }
        return null;
    }
}

class Circle implements Shape {

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

class Square implements Shape {

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

class Rectangle implements Shape {

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

// output
Circle::draw
Square::draw
Rectangle::draw
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iorichang/article/details/51538775
个人分类: Design Patterns
想对作者说点什么? 我来说一句

Spring 5 Design Patterns epub

2017年10月16日 2.87MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭