设计模式3——工厂模式
简单工厂模式:
package com.ghl.factory.simple;
/**
* @ProjectName DesignPattern
* @ClassName Car
* @Date 2020/8/26 13:12
* @Author gaohengli
* @Version 1.0
*/
//简单工厂模式
public interface Car {
void name();
}
package com.ghl.factory.simple;
/**
* @ProjectName DesignPattern
* @ClassName WuLin
* @Date 2020/8/26 13:14
* @Author gaohengli
* @Version 1.0
*/
public class WuLin implements Car {
@Override
public void name() {
System.out.println("五菱宏光");
}
}
package com.ghl.factory.simple;
/**
* @ProjectName DesignPattern
* @ClassName Tesla
* @Date 2020/8/26 13:15
* @Author gaohengli
* @Version 1.0
*/
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.ghl.factory.simple;
/**
* @ProjectName DesignPattern
* @ClassName CarFactory
* @Date 2020/8/26 13:43
* @Author gaohengli
* @Version 1.0
*/
//车工厂
//简单工厂模式,静态工厂模式
//没有满足开闭原则,增加新产品时需要改代码
public class CarFactory {
public static Car getCar(String carName){
if (carName.equals("五菱")){
return new WuLin();
}else if (carName.equals("特斯拉")){
return new Tesla();
}else {
return null;
}
}
}
package com.ghl.factory.simple;
/**
* @ProjectName DesignPattern
* @ClassName Consumer
* @Date 2020/8/26 13:21
* @Author gaohengli
* @Version 1.0
*/
//消费者买车
public class Consumer {
public static void main(String[] args) {
//接口,所有实现类,工厂
/*Car wuLin = new WuLin();
Car tesla = new Tesla();*/
//使用工厂(不用关注造车等内部细节)
Car wuLin = CarFactory.getCar("五菱");
Car tesla = CarFactory.getCar("特斯拉");
wuLin.name();
tesla.name();
}
}
工厂方法模式:
package com.ghl.factory.method;
/**
* @ProjectName DesignPattern
* @ClassName Car
* @Date 2020/8/26 13:12
* @Author gaohengli
* @Version 1.0
*/
//工厂方法模式
public interface Car {
void name();
}
package com.ghl.factory.method;
/**
* @ProjectName DesignPattern
* @ClassName WuLin
* @Date 2020/8/26 13:14
* @Author gaohengli
* @Version 1.0
*/
public class WuLin implements Car {
@Override
public void name() {
System.out.println("五菱宏光");
}
}
package com.ghl.factory.method;
/**
* @ProjectName DesignPattern
* @ClassName Tesla
* @Date 2020/8/26 13:15
* @Author gaohengli
* @Version 1.0
*/
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.ghl.factory.method;
/**
* @ProjectName DesignPattern
* @ClassName CarFactory
* @Date 2020/8/26 14:08
* @Author gaohengli
* @Version 1.0
*/
//工厂方法模式
public interface CarFactory {
Car getCar();
}
package com.ghl.factory.method;
/**
* @ProjectName DesignPattern
* @ClassName TeslaFactory
* @Date 2020/8/26 14:09
* @Author gaohengli
* @Version 1.0
*/
//特斯拉工厂
public class TeslaFactory implements CarFactory {
@Override
public Car getCar() {
return new Tesla();
}
}
package com.ghl.factory.method;
/**
* @ProjectName DesignPattern
* @ClassName WulinFactory
* @Date 2020/8/26 14:10
* @Author gaohengli
* @Version 1.0
*/
//五菱工厂
public class WulinFactory implements CarFactory {
@Override
public Car getCar() {
return new WuLin();
}
}
package com.ghl.factory.method;
import com.ghl.factory.simple.CarFactory;
/**
* @ProjectName DesignPattern
* @ClassName Consumer
* @Date 2020/8/26 13:21
* @Author gaohengli
* @Version 1.0
*/
//消费者买车
public class Consumer {
public static void main(String[] args) {
Car wuLin = new WulinFactory().getCar();
Car tesla = new TeslaFactory().getCar();
wuLin.name();
tesla.name();
}
}
总结:
结构复杂度:simple(简单工厂胜出)
代码复杂度:simple(简单工厂胜出)
编程复杂度:simple(简单工厂胜出)
管理上的复杂度:simple(简单工厂胜出)
根据设计原则:推荐工厂方法模式
根据实际业务:推荐简单工厂模式