目录
1.核心本质
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
2.简单工厂(静态工厂)
2.1 公用两个实体类
public interface Clothes {
void brand();
}
public class Adidas implements Clothes{
@Override
public void brand() {
System.out.println("阿迪达斯");
}
}
public class Nike implements Clothes{
@Override
public void brand() {
System.out.println("耐克");
}
}
2.2 简单工厂类
package shejimoshi.factory.simple;
public class Consumer {
public static void getClothes(String brand){
switch (brand){
case "adidas":
new Adidas().brand();
break;
case "nike":
new Nike().brand();
break;
default:
System.out.println("没有找到该品牌");
break;
}
}
}
2.3测试
//测试
public static void main(String[] args) {
//简单工厂
getClothes("adidas");
}
3.工厂方法模式
在原有的基础上,为每个品牌增加品牌工厂
3.1品牌工厂
//各个品牌工厂约束
public interface ClothesFactory {
Clothes createClothes();
}
//阿迪达斯工厂
public class AdidasFactory implements ClothesFactory{
@Override
public Clothes createClothes() {
return new Adidas();
}
}
//nike工厂
public class NikeFactory implements ClothesFactory{
@Override
public Clothes createClothes() {
return new Nike();
}
}
3.2测试
//测试
public static void main(String[] args) {
new AdidasFactory().createClothes().brand();
}
4.简单工厂模式和工厂方法模式对比
简单工厂:将所有对象的创建放在一个类中,只需要调用的时候传入标识,但是如果新加参数,需要修改工厂代码。
工厂方法:每个对象都会有一个对应的工厂,使用的时候只需要调用对应的工厂即可。
在开闭原则上,简单工厂需要修改工厂代码,不符合原则。工厂方法符合开闭原则。
但在实际应用上:结构复杂度,代码复杂度,编程复杂度,管理复杂度都是简单工厂胜出。