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

原文地址

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值