工厂模式是一种创建型的模式,它可以使创建对象时不会对客户端暴露创建逻辑。
工厂模式有两种,一种是简单工厂模式,一种是抽象工厂模式,抽象工厂模式又可以称作是工厂模式的工厂,即在工厂之上再建立一个创建工厂的抽象类。
1.简单工厂
public interface Car {
public void show();
}
public class CheapCar implements Car {
@Override
public void show() {
System.out.println("便宜轿车");
}
}
public class LuxuryCar implements Car {
@Override
public void show() {
System.out.println("豪华轿车");
}
}
public class CarFactory {
public Car getCar(String s){
if(s.equalsIgnoreCase("cheap")){
return new CheapCar();
}else if(s.equalsIgnoreCase("luxury")){
return new LuxuryCar();
}else{
return null;
}
}
}
2.抽象工厂
//再上面的基础上再建立一个简单工厂
//建立一个抽象类,让之前的两个工厂继承这个抽象类
public abstract class AbstractFactory {
public abstract House getHouse(String s);
public abstract Car getCar(String s);
}
//继承抽象工厂
public class HouseFactory extends AbstractFactory {
public House getHouse(String s){
if(s.equalsIgnoreCase("cheap")){
return new CheapHouse();
}else if(s.equalsIgnoreCase("luxury")){
return new LuxuryHouse();
}else{
return null;
}
}
@Override
public Car getCar(String s) {
return null;
}
}
//也继承抽象工厂
public class CarFactory extends AbstractFactory {
@Override
public House getHouse(String s) {
return null;
}
public Car getCar(String s){
if(s.equalsIgnoreCase("cheap")){
return new CheapCar();
}else if(s.equalsIgnoreCase("luxury")){
return new LuxuryCar();
}else{
return null;
}
}
}
//创建个获得两个简单工厂的工厂类
public class FactoryProducer {
public static AbstractFactory getFactory(String s){
if(s.equalsIgnoreCase("car")){
return new CarFactory();
}else if(s.equalsIgnoreCase("house")){
return new HouseFactory();
}else{
return null;
}
}
}
//这样来使用它
public static void main(String[] args) {
//使用抽象工厂
AbstractFactory abstractFactory= FactoryProducer.getFactory("car");
Car car=abstractFactory.getCar("luxury");
car.show();
}