1. 程式人生 > >簡單工廠設計模式的小case.

簡單工廠設計模式的小case.

工廠設計模式是23中GOF設計模式中最常用的的一個設計模式。spring架構中也有很多介面的設計用到此種設計模式:今天就總結一下這個設計模式並手寫一個小案例:

圖形畫的那叫一個醜。幫助理解。意思意思。

FactoryProvier:提供一個靜態方法,接受一個EnumFactoryType的引數,返回具體的工廠例項。程式碼如下:

package top.lrshuai.helloword.controller.factory;

import top.lrshuai.helloword.controller.common.EnumFactoryType;

/**
 * : 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:20
 */
public class FactoryProvider {

    public static GraphicsFactory getFactory(EnumFactoryType factoryType){
        if(factoryType==EnumFactoryType.TWOD_FACTORY){
            return new TwoDGraphicsFactroy();
        }else if(factoryType==EnumFactoryType.THREED_FACTORY){
            return new ThreeDGraphicsFactory();
        }
        return null;
    }

}

GraphicsFactory :工廠介面,提供一個抽象的方法,接受一個EnumGraphicsType型別引數。返回一個Graphics物件,需要具體的實現,程式碼如下:

package top.lrshuai.helloword.controller.factory;

import top.lrshuai.helloword.controller.common.EnumGraphicsType;
import top.lrshuai.helloword.controller.entity.Graphics;

/**
 * : 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:14
 */
public interface GraphicsFactory {

    public Graphics getGraphics(EnumGraphicsType graphicsType);

}

TwoDGraphicsFactory    ThreeDGraphicsFactory分別實現GraphicsFactory介面,並實現具體的邏輯程式碼:

package top.lrshuai.helloword.controller.factory;

import top.lrshuai.helloword.controller.common.EnumGraphicsType;
import top.lrshuai.helloword.controller.entity.Circle;
import top.lrshuai.helloword.controller.entity.Graphics;
import top.lrshuai.helloword.controller.entity.Line;

/**
 * : 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:18
 */
public class TwoDGraphicsFactroy implements GraphicsFactory {

    @Override
    public Graphics getGraphics(EnumGraphicsType graphicsType) {
        if(graphicsType==EnumGraphicsType.LINE){
            return new Line();
        }else if(graphicsType== EnumGraphicsType.CIRCLE){
            return new Circle();
        }
        return null;
    }
}

package top.lrshuai.helloword.controller.factory;

import top.lrshuai.helloword.controller.common.EnumGraphicsType;
import top.lrshuai.helloword.controller.entity.Circle;
import top.lrshuai.helloword.controller.entity.Graphics;
import top.lrshuai.helloword.controller.entity.Line;
import top.lrshuai.helloword.controller.entity.PersonPhoto;

/**
 * GraphicsFactory: 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:18
 */
public class ThreeDGraphicsFactory implements GraphicsFactory {
    @Override
    public Graphics getGraphics(EnumGraphicsType graphicsType) {
        if(graphicsType==EnumGraphicsType.PERSONPHOTO){
            return new PersonPhoto();
        }
        return null;
    }
}

Graphics:抽象類圖形,提供一個抽象的方法draw()方法。

package top.lrshuai.helloword.controller.entity;

/**
 * 圖形: 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:10
 */
public abstract class Graphics {

    public abstract void draw();
}

Line  Circle  PersonPhoto子類繼承Graphics,並重寫父類的方法實現具體的邏輯程式碼:

package top.lrshuai.helloword.controller.entity;

/**
 * 圓形圖: 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:07
 */
public class Circle extends Graphics{

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


package top.lrshuai.helloword.controller.entity;

/**
 * 線性圖: 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:06
 */
public class Line extends Graphics {

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

}


package top.lrshuai.helloword.controller.entity;

/**
 * 人形圖: 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:08
 */
public class PersonPhoto extends Graphics {

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

下面是測試類:

package top.lrshuai.helloword.controller.test;

import top.lrshuai.helloword.controller.common.EnumFactoryType;
import top.lrshuai.helloword.controller.common.EnumGraphicsType;
import top.lrshuai.helloword.controller.entity.Graphics;
import top.lrshuai.helloword.controller.factory.FactoryProvider;
import top.lrshuai.helloword.controller.factory.GraphicsFactory;

/**
 * : 描述資訊
 *
 * @author liyy
 * @date 2018-11-19 10:32
 */
public class Test {

    public static void main(String[] args){
        GraphicsFactory factory = FactoryProvider.getFactory(EnumFactoryType.TWOD_FACTORY);
        if(factory!=null){
            Graphics graphics = factory.getGraphics(EnumGraphicsType.LINE);
            if(graphics!=null){
                graphics.draw();
            }else{
                System.out.println("沒有獲取到對應的畫圖物件");
            }
        }else{
            System.out.println("沒有獲取到對應的工廠物件");
        }
    }

}

共涉及到一個介面。一個抽象類  介面的兩個實現。抽象類的三個繼承。一個靜態工廠提供入口