工厂方法模式-java实现

介绍

工厂方法模式,通过把工厂抽象为一个接口,这样当我们新增具体产品的时候,就只需要实现一个新的具体工厂类即可。一个具体工厂类,对应着一个产品。

请注意:在工厂方法模式中,一个具体工厂类只对应生产一个产品。(这是扩展产品的关键)

工厂方法模式与简单工厂模式的区别就是,不直接使用具体的工厂类,而是使用一个共同的工厂接口,于是把创建产品的任务延迟到子类进行,这样做的好处是,当我们需要增加新产品时,不需要直接去工厂类修改代码,只需新增一个工厂子类即可。

程序员只需要关注去使用哪一个具体工厂类即可。

演示一个例子:

假设现在只有一个产品table,我们希望再添加一个产品chair

那我们可以画出以下的uml图

工厂方法模式-java实现_第1张图片

 

我们还有一个客户端需要耦合与工厂对象,那么,我们其实也可以将客户端变成与配置文件的弱耦合,通过配置文件来决定去创建哪个工厂类

创建产品接口

public interface Product {
    //返回产品的信息
    String getDate();
}

创建具体产品

public class Table implements Product{
    private String name;

    public Table(String name) {
        this.name = name;
    }

    @Override
    public String getDate() {
        return "产品信息:"+name;
    }
}
public class Chair implements Product{
    private String name;

    public Chair(String name) {
        this.name = name;
    }

    @Override
    public String getDate() {
        return "产品信息:"+name;
    }
}

创建工厂接口

public interface Factory {
    //生产产品
    Product create();
}

创建工厂的具体实现类:

TableFactory,ChairFactory

public class TableFactory implements Factory{
    @Override
    public Product create() {
        return new Table("桌子");
    }
}
public class ChairFactory implements Factory{
    @Override
    public Product create() {
        return new Chair("椅子");
    }
}

创建测试的客户端

我们用客户端中的步骤来模拟上面的场景

public class Client {
    public static void main(String[] args) {
        //创建工厂类
        Factory factoryA=new TableFactory();
        //使用工厂类创建产品
        Product tableProduct = factoryA.create();
        //第一个产品的信息
        System.out.println(tableProduct.getDate());

        //新增了产品chair以后,创建该产品
        Factory factoryB=new ChairFactory();
        Product chairProduct = factoryB.create();
        System.out.println(chairProduct.getDate());
    }
}

运行结果:

 

工厂方法模式-java实现_第2张图片

你可能感兴趣的:(设计模式,笔记,JAVA,工厂方法模式)