定义:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
介绍
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
实例:
步骤 1
创建一个接口:
/**
* @version Id: Car.java, v 0.1 2019\1\6 0006 10:34 东方小猪 Exp $$
* @author: 东方小猪
* @Desprice:
*/
public interface Car {
void run();
void sendsomething();
}
步骤 2
创建实现接口的实体类。
/**
* @version Id: JiLiCarFactory.java, v 0.1 2019\1\6 0006 10:35 东方小猪 Exp $$
* @author: 东方小猪
* @Desprice:吉利汽车制造商
*/
public class JiLiCarFactory implements Car{
@Override
public void run() {
System.out.println("吉利制造的汽车在跑");
}
@Override
public void sendsomething() {
System.out.println("吉利制造的汽车在运送东西");
}
}
/**
* @version Id: BydCarFactory.java, v 0.1 2019\1\6 0006 10:37 东方小猪 Exp $$
* @author: 东方小猪
* @Desprice:比亚迪汽车制造商
*/
public class BydCarFactory implements Car{
@Override
public void run() {
System.out.println("比亚迪制造的汽车在跑");
}
@Override
public void sendsomething() {
System.out.println("比亚迪制造的汽车在运送东西");
}
}
/**
* @version Id: HaFoCarFactory.java, v 0.1 2019\1\6 0006 10:38 东方小猪 Exp $$
* @author: 东方小猪
* @Desprice:哈弗汽车制造商
*/
public class HaFoCarFactory implements Car{
@Override
public void run() {
System.out.println("哈弗制造的汽车在跑");
}
@Override
public void sendsomething() {
System.out.println("哈弗制造的汽车在运送东西");
}
}
步骤 3
创建一个工厂,生成基于给定信息的实体类的对象。
/**
* @version Id: ShoppingCar4S.java, v 0.1 2019\1\6 0006 10:41 东方小猪 Exp $$
* @author: 东方小猪
* @Desprice:4s汽车店
*/
public class ShoppingCar4S {
/*
brand要购买的汽车品牌
*/
public Car buyCar(String brand){
if(StringUtils.isBlank(brand)){
return null;
}
if(brand.equalsIgnoreCase("jili")){
return new JiLiCarFactory();
}else if(brand.equalsIgnoreCase("byd")){
return new BydCarFactory();
}else if(brand.equalsIgnoreCase("hafo")){
return new HaFoCarFactory();
}
return null;
}
}
步骤 4
使用该工厂,通过传递类型信息来获取实体类的对象。
/**
* @version Id: MainClass.java, v 0.1 2019\1\6 0006 10:45 东方小猪 Exp $$
* @author: 东方小猪
* @Desprice:
*/
public class MainClass {
public static void main(String[] args){
ShoppingCar4S shoppingCar4S=new ShoppingCar4S();
Car jili = shoppingCar4S.buyCar("jili");
jili.run();
jili.sendsomething();
Car hafo = shoppingCar4S.buyCar("hafo");
hafo.run();
hafo.sendsomething();
Car byd = shoppingCar4S.buyCar("byd");
byd.run();
byd.sendsomething();
}
}
步骤 5
执行程序,输出结果:
吉利制造的汽车在跑
吉利制造的汽车在运送东西
哈弗制造的汽车在跑
哈弗制造的汽车在运送东西
比亚迪制造的汽车在跑
比亚迪制造的汽车在运送东西