引入:话不多说,网上的工厂模式的原理多的是,我这里就不说废话了,直接上干货,希望可以帮助大家理解工厂模式。
首先我们以手机的功能为例:
1.先创建一个抽象类,让每个手机能继承这些功能,代码如下:
public abstract class MobilePhone {
public void makeCall(){
Log.d("zzz","打电话");
}
public void surfInternet(){
Log.d("zzz","上网");
}
}
2.创建几个手机类:如下
public class Meizu extends MobilePhone {
}
public class Samsung extends MobilePhone {
}
public class XiaoMi extends MobilePhone {
}
一、简单工厂又称为静态工厂方法工厂**,是由一个工厂对象决定常见哪一个产品类的实例。个人理解为:一个工厂,创建不同类型的对象。
具体代码如下:
public class MobileFactory {
public static MobilePhone createPhone(String brand){
if(brand.equals("samsung")){
return new Samsung();
}else if(brand.equals("xiaomi")){
return new XiaoMi();
}else if (brand.equals("meizu")){
return new Meizu();
}
return null;
}
}
**二、**工厂方法:
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例延迟到其子类。个人理解为:一个具体的工厂类负责创建一个具体的对象类型。
具体代码如下:
1.先创建一个抽象的工厂类
public abstract class MobileFactory2 {
public abstract MobilePhone createPhone();
}
2.创建一个类实现此方法
public class SamsungFactory extends MobileFactory2 {
@Override
public MobilePhone createPhone() {
return new Samsung();
}
}
**三、**抽象工厂
抽象工厂:为创建一组相关或依赖的对象提供一个接口,而且无需指定它们的具体类型。
个人理解为:一个具体的工厂类负责创建一系列相关的对象。
1.先创建一个抽象类:
```
public abstract class MobilePhone3 {
public abstract MobilePhone createXiaoMiPhone();
public abstract MobilePhone createSamsungPhone();
public abstract MobilePhone createMeizuPhone();
}
```
2.创建一个类实现此方法
```
public class FoxconnFactory extends MobilePhone3 {
@Override
public MobilePhone createXiaoMiPhone() {
return new XiaoMi();
}
@Override
public MobilePhone createSamsungPhone() {
return null;
}
@Override
public MobilePhone createMeizuPhone() {
return null;
}
}
```
总结:可见,工厂方法模式与简单工厂的区别主要有两点:
1.工厂方法需要定义抽象工厂类或者接口,例如上面的MobileFactory。
2.具体的对象由具体的工厂类来创建,并且每个工厂只创建一类对象。
抽象工厂模式与工厂方法的区别在于:
1.抽象工厂实际上就是工厂方法的升级版,他的一个工厂类能够生产多个不同类型的、相关联或者相互依赖的对象。
2.抽象工厂与简单工厂也类型,知识简单工厂通过一个静态函数来创建不同类型的对象,而抽象工厂通过工厂子类的多个函数创建不同类型的对象。
3.可见,几个工厂模式的侧重点在于创建对象。