java工厂模式分为三种:简单工厂、工厂方法、抽象工厂
简单工厂:
又叫静态工厂,是工厂模式三中状态中结构最为简单的。主要有一个静态方法,用来接受参数,并根据参数 来决定返回实现同一接口的不同类的实例。
public static xxxx factory(String name){
switch(name):
case apple:
//创建apple这个类
case orange:
//创建orange这个类
......
}
工厂方法
在简单工厂中,感觉这个工厂类管理太多的类,负荷太大,如果出错的话,就会出现整个工厂都不不能够使用,因此,在简单工厂的基础上,产生出了工厂方法。
工厂方法和简单工厂的主要区别是:简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。
//创建一个movable接口
public interface Moveable{
public void run();
}
//创建两个实现接口的类
public class Car implements Moveable{
public void run(){
System.out.println("car......");
}
}
public class Tank implements Moveable{
public void run(){
System.out.println("tank......");
}
}
//创建工厂接口
public interface Factory{
public Moveable factory();
}
//创建生产tank的工厂
public class TankFactory implements Factory{
public Moveable factory(){
return new Tank();
}
}
//创建生产car的工厂
public class CarFactory implements Factory{
public Moveable factory(){
return new Car();
}
}
在上边的代码中,主要是将生产的过程给分离出来,不会使得咋一个类中,产生所有的产品。
抽象工厂
抽象工厂与工厂方法的区别:工厂方法产生的是一个产品,而抽象方法产生的是一个产品族(产品组合)
public interface Factory{
public Weapon createWeapon();
public Vehicle createVehicle();
public Food createFood();
}
//创建三个接口Weapon、Vehicle、Food
public interface Weapon{
public void shoot();
}
public interface Vehicle{
public void run();
}
public interface Food{
public void eat();
}
//实现三个接口
public class AK47 implements Weapon{
public void shoot(){
System.out.prinln("ak47.....");
}
}
public class Car implements Vehicle{
public void run(){
System.out.prinln("car.....");
}
}
public class Apple implements food{
public void eat(){
System.out.prinln("apple.....");
}
}
现在将产品进行组合形成一个新的产品系列
//在现实生活中
public class DefaultFactory implements Factory{
public Weapon createWeapon(){
return new AK47();
}
public Vehicle createVehicle(){
return new Car();
}
public Food createFood(){
return new Apple();
}
}
这是第一次写博客,感觉自己写博客和看别人的博客完全是不同的体验,没有经验,希望大家多多指教。