工厂方法模式 (Factory Method)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂方法模式 (Factory Method)相关的知识,希望对你有一定的参考价值。

参考技术A

在了解工厂方法模式前不得不提的就是简单工厂模式,简单工厂模式就是建造了一个工厂用于生产各式各样的产品,但是他是静态的,一旦写完后就不能改动了,很明显他并不符合我们的设计理念,纵观七大设计原则,体现的都是高聚合,低耦合,封闭强,易拓展。这种死板的设计模式怎么可能为我们继续使用呢?于是,工厂方法模式诞生了。工厂方法模式之于简单工厂模式就好比活字印刷术之于印刷术,更加灵活,可用性高,易拓展。

与简单工厂不同的是,工厂方法模式中的工厂不必再去负责所有产品的具体创建,而是创建一个虚拟工厂,然后再对其进行实现具体工厂以完成不同产品的创建。这样做的好处显而易见,当我们想继续为这个工厂添加新产品的时候不需要修改原本的工厂,只需要实现虚拟工厂就可以完成新产品的创建。

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

涉及到的设计原则:

工厂方法模式包含如下角色:

这里我们制作一个形状工厂,用于生产各式各样的形状

Demo:

Running result:

你可以直接在我的 github 获取该实例的源码及STARUML项目 :)

优点:

缺点:

还想要了解其他设计模式 ?戳这里!

Factory Method 工厂方法模式

需求:对象的创建由工厂统一创建,会使用到模板模式

技术图片

代码清单:

工厂:

public abstract class Factory {
    public abstract  Product createProduct(String owner);
    public abstract  void registerProduct(Product product);

    public final Product create(String owner){
        Product p = createProduct(owner);
        registerProduct(p);
        return  p;
    }
}

产品:

public abstract class Product {
    public abstract void use();
}

子工厂:

public class IDCardFactory extends Factory{
    private List owners = new ArrayList();

    @Override
    public Product createProduct(String owner) {
        return new IDCard(owner);
    }

    @Override
    public void registerProduct(Product product) {
        owners.add(((IDCard)product).getOwner());
    }

    public List getOwners(){
        return owners;
    }
}

子产品:

public class IDCard extends Product{
    private String owner;

    IDCard(String owner){
        this.owner = owner;
    }

    @Override
    public void use() {
        System.out.println("使用"+owner+"的身份证");
    }

    public String getOwner(){
        return owner;
    }
}

测试方法:

public class Main {
    public static void main(String[] args){
        Factory factory = new IDCardFactory();
        Product p1 = factory.create("1");
        Product p2 = factory.create("2");
        Product p3 = factory.create("3");
        p1.use();
        p2.use();
        p3.use();
    }
}

 

以上是关于工厂方法模式 (Factory Method)的主要内容,如果未能解决你的问题,请参考以下文章

工厂方法模式-Factory Method

设计模式——工厂方法模式(Factory Method)

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

工厂方法模式 (Factory Method)

设计模式工厂方法模式(Factory Method)

工厂方法模式(Factory Method)