設計模式快速學習(二)抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其餘工廠。該超級工廠又稱爲其餘工廠的工廠。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。java

直接上demo.先代碼,後介紹。設計模式

若是在以前你沒有看過工廠模式,請坐下面的時光機傳送,不光是思想基礎,主要是演變的過程要知道。 設計模式快速學習(一)工廠模式bash

1. 編寫接口Shape

Shape.javaide

public interface Shape {
   void draw();
}
複製代碼
2. 編寫接口Shape的實現類Rectangle

Rectangle.java學習

/**
 * Created by Fant.J.
 */
public class Rectangle implements Shape {
    @Override
    public void describe() {
        System.out.println("我是個長方形");
    }
}
複製代碼
3. 編寫接口Shape的實現類Circle

Circle .java測試

/**
 * Created by Fant.J.
 */
public class Circle implements Shape {
    @Override
    public void describe() {
        System.out.println("我是個圓形");
    }
}
複製代碼
4. 編寫接口Color

Color .javaui

/**
 * Created by Fant.J.
 */
public interface Color {
    void fill();
}
複製代碼
5. 編寫接口Color 的實現類Red

Red .javaspa

/**
 * Created by Fant.J.
 */
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("填充了紅色");
    }
}
複製代碼
6. 編寫接口Color 的實現類Green

Green .java設計

/**
 * Created by Fant.J.
 */
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("填充了綠色");
    }
}
複製代碼
7. 爲 Color 和 Shape 對象建立抽象類來獲取工廠
/**
 * Created by Fant.J.
 */
public abstract class AbstractFactory {
    abstract Color getColor(String color);
    abstract <T> T getShape(Class<T> clazz) ;
}

複製代碼
8. 擴展(繼承)AbstractFactory 工廠類,使其能夠生成實體類Shape的對象

ShapeFactory .javacode

/**
 * Created by Fant.J.
 */
public class ShapeFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        return null;
    }


    @Override
    <T> T getShape(Class<T> clazz) {
        T obj = null;
        try {
            obj = clazz.getDeclaredConstructor().newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return obj;
    }
}
複製代碼
9. 擴展(繼承)AbstractFactory 工廠類,使其能夠生成實體類Color的對象 . 略
10. 建立工廠生成器,用來生成Shape 或 Color 工廠

FactoryProducer .java

/**
 * Created by Fant.J.
 */
public class FactoryProducer {
    public static <T> AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("SHAPE")){
            return new ShapeFactory();
        } else if(choice.equalsIgnoreCase("COLOR")){
            //這裏不舉例子了,你能夠本身 建立一個 ColorFactory
            return null;
        }
        return null;
    }
}
複製代碼
11. 測試
/**
 * Created by Fant.J.
 */
public class Test {
    public static void main(String[] args) {
        //抽象類不能直接調用,因此咱們實例化 只能實例其子類對象
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
        shapeFactory.getShape(Circle.class).describe();
    }
}
複製代碼

總結

這個實現看起來很複雜,我把大概思路總結一下: 首先,咱們能夠經過 工廠生成器來生成一個抽象工廠類,而後調用抽象工廠類的擴展類(子類)方法。

相關文章
相關標籤/搜索