工厂模式种类:
一、简单工厂模式:不利于生成系列产品;
二、工厂方法模式:又称为多形性工厂;
三、抽象工厂模式:称为工具箱,产生产品族,但不利于产生新的产品;
简单工厂的类图:
①汽车接口:
public class Audi implements Car{
private String name="Audi" ;
@Override
public String toString() {
return "name == "+name;
}
@Override
public Car get() {
return new Audi();
}
}
public class Benz implements Car{
private String name="Benz" ;
@Override
public String toString() {
return "name == "+name;
}
@Override
public Car get() {
return new Benz();
}
}
public class Bmw implements Car{
private String name="Bmw" ;
@Override
public String toString() {
return "name == "+name;
}
@Override
public Car get() {
return new Bmw();
}
}
public interface Car {
public Car get();
}
public class CarFactory {
public static Car make(Car car){
return car.get();
}
}
public class ForS {
public static Car take(String name){
if("Bmw".equals(name)){
return CarFactory.make(new Bmw());
}else if("Benz".equals(name)){
return CarFactory.make(new Benz());
}else if("Audi".equals(name)){
return CarFactory.make(new Audi());
}else{
System.out.println("暂时没Car");
return null;
}
}
public static void main(String[] args) {
System.out.println("进入汽车店:");
System.out.println(take("Bmw"));
System.out.println(take("Benz"));
System.out.println(take("Audi"));
}
}
B 工厂方法模式:解决简单工厂模式中的麻烦的逻辑判断,反射配合xml也可决绝这样的问题,此时学习工厂方法模式的优点。
public class Audi implements Car{
private String name="Audi" ;
@Override
public String toString() {
return "name == "+name;
}
@Override
public Car get() {
return new Audi();
}
}
public class AudiFactory implements CarFactory{
@Override
public Car make() {
return new Bmw();
}
}
public class Benz implements Car{
private String name="Benz" ;
@Override
public String toString() {
return "name == "+name;
}
@Override
public Car get() {
return new Benz();
}
}
public class BenzFactory implements CarFactory{
@Override
public Car make() {
return new Benz();
}
}
public class Bmw implements Car{
private String name="Bmw" ;
@Override
public String toString() {
return "name == "+name;
}
@Override
public Car get() {
return new Bmw();
}
}
public class BmwFactory implements CarFactory{
@Override
public Car make() {
return new Audi();
}
}
public interface Car {
public Car get();
}
public interface CarFactory {
public Car make();
}
public class ForS {
public static Car take(CarFactory factory){
return factory.make();
}
public static void main(String[] args) {
System.out.println("进入汽车店:");
System.out.println(take(new BmwFactory()));
System.out.println(take(new BenzFactory()));
System.out.println(take(new AudiFactory()));
}
}