工厂方法模式 (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)的主要内容,如果未能解决你的问题,请参考以下文章