JDK 中的 Calendar 类中,使用了简单工厂模式
什么是工厂模式
工厂模式是一个创建型模式,是由一个工厂对象决定创建出哪种产品类的实例的设计模式。
工厂模式可以细分为两种:
- 简单工厂模式
- 工厂方法模式
为什么要用工厂模式
为了将实例化对象的代码提取出来,放到一个类中统一管理和维护,使得主项目的依赖关系解耦,提高项目的可扩展性和可维护性,使创建者和调用者分离。
在软件开发过程中,如果会用到大量的创建某种、某类或者某批对象时,需要使用工厂模式。
功能需求与简单实现
这部分是用来提出一个需求并提供一个很简单的实现,这个实现会违反一些原则,会在后面的文章中逐步优化。
功能需求
现在想要播放手机里的一个视频,手机里有很多播放软件,需要选择一个播放器进行播放。
简单实现
播放器接口:
public interface IPlayer {
void play();
}
三个播放器:
public class Bilibili implements Iplayer{
@Override
public void play() {
System.out.println("bilibili play.");
}
}
public class Iqiyi implements IPlayer {
@Override
public void play() {
System.out.println("iqiyi play.");
}
}
public class Youku implements IPlayer {
@Override
public void play() {
System.out.println("youku play.");
}
}
用户调用:
import java.util.Scanner;
public class User {
public static void main(String[] args) {
IPlayer player1 = new Bilibili();
IPlayer player2 = new Iqiyi();
IPlayer player3 = new Youku();
String player = getType();
if ("bilibili".equals(player)) {
player1.play();
} else if ("iqiyi".equals(player)) {
player2.play();
} else if ("youku".equals(player)) {
player3.play();
} else {
System.out.println("没有此播放器");
}
}
private static String getType() {
Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
}
分析
现在的类图:
可以发现,用户需要知道三个播放器,由用户自己创建出对应的播放器才可以使用,创建者和调用者没有分离,用户和播放器的耦合度很高。
相关改进方法参见: