将模版模式用于生成实例,就演变为工厂模式。在工厂模式中,父类决定实例的生成方式,但并不决定要生成的具体的类,具体生成交由子类负责,这就将生成实例的框架和负责实际生成实例的类解耦。
代码:
1 | package framework; |
1 | package framework; |
framework包中定义了抽象工厂和抽象产品。注意抽象工厂定义了create
方法,这就是模版。具体创造产品、注册产品则交给子类去实现。请注意create
方法中使用createProduct
而不是new来生产产品,这就避免了抽象工厂类与具体的类耦合。
1 | package idcard; |
1 | package idcard; |
idcard包中则是具体的工厂及产品。IDCard
实现了use
方法。IDCardFactory
则实现了createProduct
和registerProduct
方法。
framework包中完全没有出现idcard包及其中各类,这就意味着如果需要增加新的产品(比如电视),那么只需要创建新的电视包,编写生产电视的工厂和具体电视,framework包则完全不需要更改。