Java设计模式之工厂方法模式

这一篇要记录的是工厂方法模式

工厂方法模式就是简单工厂模式的一种升级,借别人的一句话来介绍工厂方法模式:工厂方法模式是类的创建模式,又叫虚拟构造子模式,或者多态性工厂模式

        工厂方法模式的用意:创建一个生产产品的借口工厂类,把实际的创建工作推迟到子类中去做。

首先回顾一下简单工厂模式:就是创建一个静态工厂类。通过传入不同的参数来获得不同的产品类,但当遇到产品类的类别非常多,且每一类中又有很多的子产品。这样在通过静态工厂类去生产产品类,在静态方法中就需要加入很多的判断,因为产品很复杂,这种情况怎么办,就通过对简单工厂模式做一次升级。就是工厂方法模式,首先创建一个工厂的借口类,然后根据产品的类别创建出具体的产品工厂类,这样通过往具体的产品工厂类传递参数就可以每个类别产品中不同的产品了。

看一个实例吧

  首先看产品接口类

   

public interface Product {
    public void toDo();//业务逻辑
}
再看看具体的产品类:
public class Pdf1Product implements Product {
    @Override
    public void toDo() {
        //具体的业务逻辑
    }
}
public class Pdf2Product implements Product {
    @Override
    public void toDo() {
        //具体的业务逻辑
    }
}
public class Html1Product implements Product {
    @Override
    public void toDo() {
        //具体的业务逻辑
    }
}
public class Html2Product implements Product {
    @Override
    public void toDo() {
        //具体的业务逻辑
    }
}
这是具体的产品类,下面我在看看工厂类,首先看一下工厂接口类:
public interface Factory {
    public Product productFactory(int type);
}
再看看根据不同类别的产品所构造出的具体的产品工厂类:
public class HtmlFactory implements Factory {
    @Override
    public Product productFactory(int type) {
        Product product;
        switch (type) {
            case 1:
                product = new Html1Product();
                break;
            case 2:
                product = new Html2Product();
                break;
            default:
                product = new Html1Product();
                break;
        }
        return product;
    }
}
public class PdfFactory implements Factory {
    @Override
    public Product productFactory(int type) {
        Product product;
        switch (type){
            case 1:
                product = new Pdf1Product();
                break;
            case 2:
                product = new Pdf2Product();
                break;
            default:
                product = new Pdf1Product();
                break;
        }
        return  product;
    }
}

下面的就是具体的应用类:
public Factory factory;

public static void main(String args[]) {
    Test test = new Test();
    test.factory = new PdfFactory();
    Product product = test.factory.productFactory(1);
    product.toDo();//这样就可以找到具体的类就执行具体的方法了
}
这样具体的实现类,代码就很简洁了,如果想换产品类,也只需微调一下代码就可实现了。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值