工厂模式
描述:
工厂模式实际上就是提供一个获取对象实例的工厂,比如一个球类工厂生产篮球和足球,通过调用工厂的build方法去获得具体球类的对象,至于如何去创建和获得这个对象实例则不是我们需要关心的东西。
常用场景:
在不同条件下明确需要获得不同的对象,而其创建对象的方式并不被关心的时候。
如服装厂,获取衣服和裤子等服装。
项目结构:
实现:
1.工厂模式的接口类
/**
* @author Carl
* @version 1.0
* @date 2020/8/4 14:03
* @description 工厂模式的接口类
**/
public interface Ball {
void doSomething();
}
2.ball接口类的实现类–篮球
/**
* @author Carl
* @version 1.0
* @date 2020/8/4 14:05
* @description ball接口类的实现类--篮球
**/
public class Basketball implements Ball {
@Override
public void doSomething() {
System.out.println("get a basketball");
}
}
3.ball接口类的实现类–足球
/**
* @author Carl
* @version 1.0
* @date 2020/8/4 14:06
* @description ball接口类的实现类--足球
**/
public class Football implements Ball {
@Override
public void doSomething() {
System.out.println("get a football");
}
}
4.ball工厂类
/**
* @author Carl
* @version 1.0
* @date 2020/8/4 14:07
* @description 球类工厂
**/
public class BallFactory{
public static Ball build(String whichBall){
if("basketball".equals(whichBall)){
return new Basketball();
}else if ("football".equals(whichBall)){
return new Football();
}else {
return null;
}
}
}
5.测试
/**
* @author Carl
* @version 1.0
* @date 2020/8/4 14:11
* @description
**/
public class Domain {
public static void main(String[] args) {
Ball basketball = BallFactory.build("basketball");
basketball.doSomething();
Ball football = BallFactory.build("football");
football.doSomething();
}
}
6.测试结果
get a basketball
get a football
说明
1.Basketball和Football类实现了Ball接口类
2.BallFactory的build方法返回Ball类型的对象实例
3.通过直接调用BallFactory.build()方法的入参名称返回basketball或者football类