定义:工厂模式是我们软件设计最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。
好处:在创建一类对象时,使用工厂模式,给系统带来更大的可扩展性和更少的修改量
代码:
扩展:上面的工厂和产品都使用了“接口+实现类”的方式来实现,也可以使用“抽象类+派生类”来实现。
区别:将产品判断逻辑放到场景类中,解决某个产品的生产可能依赖其他产品。
好处:在创建一类对象时,使用工厂模式,给系统带来更大的可扩展性和更少的修改量
代码:
package factorymodel.factorymethord;
/**
*
*
* @author naivor 工厂方法模式_场景类
*/
public class FactoryMethord {
public static void main(String[] args) {
Product1Factory factory = new Product1Factory(); //通过改变产品工厂类型,生产不同的产品
Product product = factory.createProduct();
product.doSomething();
}
}
/**
*
* @author naivor 工厂方法模式_工厂接口
*/
interface Factory {
Product createProduct();
}
/**
*
* @author naivor 工厂方法模式_产品1工厂
*/
class Product1Factory implements Factory {
public Product createProduct() {
return new Product1();
}
}
/**
*
* @author naivor 工厂方法模式_产品2工厂
*/
class Product2Factory implements Factory {
public Product createProduct() {
return new Product2();
}
}
/**
*
* @author naivor 工厂方法模式_产品3工厂
*/
class Product3Factory implements Factory {
public Product createProduct() {
return new Product3();
}
}
/**
*
* @author naivor 工厂方法模式_产品接口
*/
interface Product {
void doSomething();
}
/**
*
* @author naivor 工厂方法模式_产品1类
*/
class Product1 implements Product {
public void doSomething() {
// Product1的业务逻辑
}
}
/**
*
* @author naivor 工厂方法模式_产品2类
*/
class Product2 implements Product {
public void doSomething() {
// Product2的业务逻辑
}
}
/**
*
* @author naivor 工厂方法模式_产品3类
*/
class Product3 implements Product {
public void doSomething() {
// Product3的业务逻辑
}
}
扩展:上面的工厂和产品都使用了“接口+实现类”的方式来实现,也可以使用“抽象类+派生类”来实现。
区别:将产品判断逻辑放到场景类中,解决某个产品的生产可能依赖其他产品。