浅谈Java设计模式系列0x00
浅谈Java设计模式系列0x01—单例模式
什么是工厂模式
工厂就是用来生产产品的地方,而在设计模式中,工厂就是一个创建各种对象的地方(类);
工厂通常包含一个或多个方法,用来创建该工厂所能创建的各种类型的对象;
它和上次的单例模式一样也是创建型模式;
什么是简单工厂模式
我认为可以用一句话来概括简单工厂模式的关键:
just say what you want,don’t worry the detail;
当然这句话只是我对这简单工厂模式的理解,你只要说你需要什么,不必关心它是怎样创建的;
因为简单工厂模式可以根据传进来的参数创建特定的对象,而且创建的对象都具有共同的父类;
在简单工厂模式中用来创建对象实例的方法都是静态方法,所以简单工厂模式又叫做静态工厂方法(Static Factory Method)模式;
什么时候可以使用简单工厂模式
- 当工厂类负责创建的对象比较少的时候,此时的业务逻辑会比较简单
- 使用者只知道传入工厂类的参数,其他的并不关心
模式结构
简单工厂模式主要包含的角色有:
- Factory : 工厂角色
工厂角色负责实现创建所有实例的内部逻辑 - Product : 抽象产品角色
抽象产品角色是创建的所有对象的父类,负责描述所有实例的共有接口 - Concrete Product : 具体产品角色
具体产品角色是创建的目标,这就是使用者最后得到的对象
举个例子
代码参考
我们来个简单的例子,以手机工厂为例;
抽象产品接口:1
2
3
4public interface Phone {
//共有的接口方法
void call();
}
具体的产品类 Apple Phone:1
2
3
4
5
6public class ApplePhone implements Phone {
public void call() {
System.out.println("This is Apple Phone calling......");
}
}
一个具体的产品类 Android Phone:1
2
3
4
5
6public class AndroidPhone implements Phone {
public void call() {
System.out.println("This is Android Phone calling.....");
}
}
手机工厂类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class PhoneFactory {
/**
* 根据参数返回不同的实例对象
* @param type 手机类型
* @return 具体的手机对象
*/
public static Phone createPhone(String type) {
switch (type) {
case "android":
return new AndroidPhone();
case "apple":
return new ApplePhone();
}
return null;
}
}
测试类:1
2
3
4
5
6
7
8public class Client {
public static void main(String[] args) {
Phone android = (AndroidPhone) PhoneFactory.createPhone("android");
Phone apple = (ApplePhone) PhoneFactory.createPhone("apple");
android.call();
apple.call();
}
}
运行结果:1
2This is Android Phone calling.....
This is Apple Phone calling......
总结
简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责;
但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。