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();
    }
}

原文地址

 

 

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