上一篇我们讲了静态工厂模式的具体实现,点击前往,我们可以发现,我们在静态工厂模式中只提供了一个工厂,当我们需要添加不同的产品时,很明显就需要修改源代码,这就违背了开闭原则,为了避免这一情况,我们引入了工厂模式。
工厂模式:简单的说就是提供一个工厂接口和产品接口,我们通过工厂接口来实现不同的工厂,通过不同的工厂来获取不同的实例,通过产品接口来实现不同的产品。
首先我们先创建产品接口,并提供产品方法:
package day01;
interface Product {
//提供实现接口
public void method();
}
然后我们创建工厂接口,并提供工厂方法:
package day01;
interface AbstractFactory {
public Product factoryMethod();
}
这里我们创建两个具体工厂,CarFactory和BikeFactory:
package day01;
public class CarFactory implements AbstractFactory{
@Override
public Product factoryMethod() {
Product product=new Car();
return product;
}
}
package day01;
public class BikeFactory implements AbstractFactory{
@Override
public Product factoryMethod() {
Product product=new Bike();
return product;
}
}
然后创建两个具体的产品Car和Bike:
package day01;
public class Car implements Product{
@Override
public void method() {
System.out.println("我是car产品的具体实现方法");
}
}
package day01;
public class Bike implements Product{
@Override
public void method() {
System.out.println("我是bike产品的具体实现方法");
}
}
最后,我们在客户端测试一下:
package day01;
public class Client {
public static void main(String[] args) {
AbstractFactory factory;
Product product;
//获取Bike工厂
factory=new BikeFactory();
//通过工厂获取Bike实例
product=factory.factoryMethod();
//通过实例调用具体实现
product.method();
}
}
这样,到了这里,工厂模式就算了实现了。
工厂模式虽然解决了一些静态工厂模式的缺陷,但本身并非完美的。如果我们要添加新的产品,就需要编写新的实现类,需要新的工厂!同时,我们会发现,一个工厂只能添加生产一个产品,很明显,这样会给我们带来很大的不便,所以为了避免这种情况,我们引入了抽象工厂,点击前往