Java 編程 工廠模式

簡單工廠模式,

       定義一個工廠類,根據傳入的參數返回不同的實例,被創建的實例有共同的父類或者接口,

適用的場景:

  1. 工廠類中可創建的對象不能太多,否則工廠類中的業務邏輯太複雜。
  2. 客戶端不關心對象的創建過程

實例:可以創建三角形、正方形、等帶有draw 方法的類

// 接口
public interface Shape {void draw();}

// 各個形狀的實現
public class CircleShape implements Shape {
    public CircleShape() { System.out.println("Circle construct"); }
    @Override
    public void draw() {System.out.println("a Circle");}
}

public class RectShape implements Shape {
    public RectShape() { System.out.println("a react"); }
    @Override
    public void draw() {System.out.println("a react");}
}

public class TriangleShape implements Shape {
    public TriangleShape() { System.out.println("triangle construct"); }
    @Override
    public void draw() {System.out.println("a triangle");}
}

// 工廠類
public class ShapeFactory {
    public static final String TAG = "ShapeFactory";
    public static Shape getShape(String type){
        Shape shape = null;
        if (type.equalsIgnoreCase("circle")){
            shape = new CircleShape();
        }else if (type.equalsIgnoreCase("rect")){
            shape = new RectShape();
        }else if (type.equalsIgnoreCase("triangle")){
            shape = new TriangleShape();
        }
        return shape;
    }
}

// 使用工廠類
public class CreateShape {
    public static void main(String[] args) {
        Shape circle = ShapeFactory.getShape("circle");
        circle.draw();
    }
}

工廠方法模式

這種模式中,我們不再提供一個統一的工廠類來創建所有的對象,而是正對不同的對象提供不同的工廠,也就是說每個對象都有一個對應的工廠。

實例:圖片加載類,它具有多個圖片加載器,用來加載jpg,png,gif格式的圖片,每個加載器都有一個read()方法,用於讀取圖片

// reader 接口類
public interface Reader { void Read();}

// 各個格式的reader
public class GifReader implements Reader {
    @Override
    public void Read() {System.out.println("GifReader..");}
}

public class JpgReader implements Reader {
    @Override
    public void Read() {System.out.println("JpgReader..");}
}

// 工廠接口類
public interface ReaderFactory { Reader getReader();}

// 工廠接口類的實現
public class GifReaderFactory implements ReaderFactory {
    @Override
    public Reader getReader() {return new GifReader();}
}

public class JpgReaderFactory implements ReaderFactory {
    @Override
    public Reader getReader() {return new JpgReader();}
}

創建類
public class createFactory {

    public static void main(String[] args) {
        JpgReaderFactory factory = new JpgReaderFactory();
        Reader reader = factory.getReader();
        reader.Read();

        PngReaderFactory factory1 = new PngReaderFactory();
        Reader reader1 = factory1.getReader();
        reader1.Read();
    }
}

原文地址

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章