什么是工厂设计模式:
所谓工厂就是批量生产相同的产品(红色),假设有100个,分别用到100个地方,现在改变需求了,客户需要用绿色的,那么,你不能每个地方分别new绿色的产品吧,只需要把工厂加的调料变成绿色的就可以了,然后送往各地的颜色就是绿色的了.
工厂模式分为三种:简单工厂(静态工厂模式),工厂方法,抽象工厂模式
1.简单工厂模式:假设我们有两种颜料,红和绿,在工厂放入什么颜色就产生什么颜色的车,首先我们以面相对象得思想分析一下,因为工厂只产车,所以我只要抽象一个车的接口就可以了,至于什么颜色是后来(传递参数决定)决定的,然后在根据你的颜色创建不同的车,车都是有颜色的,需要什么颜色的车实现这个接口就可以了接口.
public interface Car {
void color();
}
public class RedCar implements Car {
@Override
public void color() {
System.out.println("我是红色的车");
}
}
public class GreenCar implements Car {
@Override
public void color() {
System.out.println("我是绿色的车");
}
}
public class CarFactory {
public static Car greatCar(String color) throws Exception{
if (color.equals("red")) {
return new RedCar();
}else if (color.equals("green")){
return new GreenCar();
}else {
System.out.println("对不起我们只能生产红车和绿车,因为只有他俩实现了车的接口");
throw new UnsupportedAudioFileException();
}
}
//test
public static void main(String[] args) throws Exception {
CarFactory.greatCar("red").color();;
CarFactory.greatCar("green").color();
CarFactory.greatCar("other").color();
}
}
//
运行结果
我是红色的车
我是绿色的车
对不起我们只能生产红车和绿车,因为只有他俩实现了车的接口
Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException
at com.shejimoshi.CarFactory.greatCar(CarFactory.java:14)
at com.shejimoshi.CarFactory.main(CarFactory.java:22)
2.工厂方法模式:在进一步的以面向对象的思想分析,CarFatory是不是也可以看成一个抽象类,由有具体的涂料的工厂实现它,你需要产红车我就用红车的工厂,你产绿车我就用绿车的工厂.
public interface CarFactory {
Car create();
}
public class GreenFactory implements CarFactory {
@Override
public Car create() {
return new GreenCar();
}
}
public class RedFactory implements CarFactory {
@Override
public Car create() {
return new RedCar();
}
}
public class Test {
public static void main(String[] args) {
CarFactory carFactory = new RedFactory();//java的多态,父类引用指向子类对象
Car car = carFactory.create();
car.color();//控制台输出:我是红色的车
}
//在使用工厂方法的时候回创建大量的工厂对象new RedFactory(),占用内存,我们要根据情况,具体选择
}
3.抽象工厂模式
public abstract class AbstractFactory {
//有多个产品族,例如车,船.等等........
public abstract Car createCar();
public abstract Ship createShip();//car ship 均为抽象类
}
public class DefaultFactory extends AbstractFactory{
@Override
public Car createCar() {
return new RedCar();//RedCar 实现了car
}
@Override
public Ship createShip() {
return new SmallShip();//同理
}
}
public class Test {
public static void main(String[] args) {
AbstractFactory f = new DefaultFactory();
Car car = f.createCar();
v.color();
Ship s = f.createShip();
w.run();
}
}
总结: 简单工厂模式是由一个具体的类(CarFactory)去创建其它类的实例.
工厂方法模式是有一个抽象的父公共接口,子类负责生成具体的对象,将类的实例延迟到子类操作.
抽象模式定义一系列的类,可以创建多个方法,可以有有不同的返回值,和方法名,如果只有一个就是工厂方法模式.