类型:创建模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
实现代码
新建抽象工厂接口:
package car_factory_interface;
import car_interface.Icar_interface;
public interface Icar_factory {
public Icar_interface create_threeW_car();
public Icar_interface create_audi_car();
}
新建抽象工厂接口的高级车adv工厂实现类:
package car_factory_imple;
import car_factory_interface.Icar_factory;
import car_imple.car_3w_imple_adv;
import car_imple.car_audi_imple_adv;
import car_interface.Icar_interface;
public class car_factory_adv implements Icar_factory {
public Icar_interface create_audi_car() {
car_audi_imple_adv car_audi_imple_adv = new car_audi_imple_adv();
car_audi_imple_adv.setName("奥迪A6");
car_audi_imple_adv.setSpeed(300);
return car_audi_imple_adv;
}
public Icar_interface create_threeW_car() {
car_3w_imple_adv car_3w_imple_adv_ref = new car_3w_imple_adv();
car_3w_imple_adv_ref.setName("大众A6");
car_3w_imple_adv_ref.setSpeed(300);
return car_3w_imple_adv_ref;
}
}
新建抽象工厂接口的普通车low工厂实现类:
package car_factory_imple;
import car_factory_interface.Icar_factory;
import car_imple.car_3w_imple_low;
import car_imple.car_audi_imple_low;
import car_interface.Icar_interface;
public class car_factory_low implements Icar_factory {
public Icar_interface create_audi_car() {
car_audi_imple_low car_audi_imple_low_ref = new car_audi_imple_low();
car_audi_imple_low_ref.setName("奥迪A6");
car_audi_imple_low_ref.setSpeed(300);
return car_audi_imple_low_ref;
}
public Icar_interface create_threeW_car() {
car_3w_imple_low car_3w_imple_low_ref = new car_3w_imple_low();
car_3w_imple_low_ref.setName("大众A6");
car_3w_imple_low_ref.setSpeed(300);
return car_3w_imple_low_ref;
}
}
上面已经有抽象工厂和具体工厂的实现类了。
新建汽车接口:
package car_interface;
public interface Icar_interface {
public void start();
public void stop();
}
新建汽车父类:
package car_imple;
import car_interface.Icar_interface;
public class base_car_imple implements Icar_interface {
private int speed;
private String name;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void start() {
// TODO Auto-generated method stub
}
public void stop() {
// TODO Auto-generated method stub
}
}
新建大众高级车:
package car_imple;
import car_interface.Icar_interface;
public class car_3w_imple_adv extends base_car_imple {
public void start() {
System.out.println("富华版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
+ this.getSpeed());
}
public void stop() {
System.out.println("富华版:" + this.getName() + " 车以专利技术停车了");
}
}
新建大众普通车:
package car_imple;
import car_interface.Icar_interface;
public class car_3w_imple_low extends base_car_imple {
public void start() {
System.out.println("普通版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
+ this.getSpeed());
}
public void stop() {
System.out.println("普通版:" + this.getName() + " 车以专利技术停车了");
}
}
新建大众普通车:
package car_imple;
import car_interface.Icar_interface;
public class car_audi_imple_adv extends base_car_imple {
public void start() {
System.out.println("富华版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
+ this.getSpeed());
}
public void stop() {
System.out.println("富华版:" + this.getName() + " 车以专利技术停车了");
}
}
新建奥迪普通车:
package car_imple;
import car_interface.Icar_interface;
public class car_audi_imple_low extends base_car_imple {
public void start() {
System.out.println("普通版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
+ this.getSpeed());
}
public void stop() {
System.out.println("普通版:" + this.getName() + " 车以专利技术停车了");
}
}
新建客户端运行类:
package run_main;
import car_factory_imple.car_factory_adv;
import car_factory_interface.Icar_factory;
import car_interface.Icar_interface;
public class run_main {
public static void main(String[] args) {
Icar_factory Icar_factory_ref = new car_factory_adv();
Icar_interface Icar_interface_ref = Icar_factory_ref
.create_threeW_car();
Icar_interface_ref.start();
Icar_interface_ref.stop();
}
}
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。