工厂方法模式是类的创建模式,又叫虚拟构造函数模式或多态性工厂模式。
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
之前,我们说到简单工厂模式的优点是允许客户端相对独立于产品创建的过程,并在系统引入新产品的时候无需修改客户端,也就是说,它在某种程度上支持开闭原则。
但,简单工厂模式的缺点是对开闭原则的支持不够,因为如果有新的产品加入到系统中,就需要修改工厂类,将必要的逻辑加入到工厂中。
从上图可以看出,这个使用了工厂方法模式的 系统涉及到以下角色:
抽象工厂角色和抽象产品角色都可以选择由java接口或者java抽象类来实现。
抽象工厂角色Creator类源码
public interface Creator {
public Product factory();
}
抽象产品角色Product类源码
public interface Product {
}
具体工厂角色ConcreteCreator1类源码
public class ConcreteProduct1 implements Product {
public ConcreteProduct1(){
//do something
}
}
具体工厂角色ConcreteCreator2类源码
public class ConcreteCreator2 implements Creator {
public Product factory() {
// TODO Auto-generated method stub
return new ConcreteProduct2();
}
}
具体产品角色ConcreteProduct1类的源码
public class ConcreteProduct1 implements Product {
public ConcreteProduct1(){
//do something
}
}
具体产品角色ConcreteProduct2类的源码
public class ConcreteProduct2 implements Product {
public ConcreteProduct2(){
//do something
}
}
客户端角色Client类的源码
public class Client {
private static Creator creator1,creator2;
private static Product prod1,prod2;
public static void main(String[] args) {
// TODO Auto-generated method stub
creator1 = new ConcreteCreator1();
prod1 = creator1.factory();
creator2 = new ConcreteCreator2();
prod2 = creator2.factory();
}
}
工厂方法模式在农场系统中的实现
设计图如下:
代码如下:
然后是产品相关
在java聚集中的应用
一个具体的java聚集对象会通过这个iterator方法接口返还一个具体的Iterator类。
可以看出,这个iterator()方法就是一个工厂方法。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有