https://blog.csdn.net/qq_57005976/article/details/134367016
工厂模式
工厂模式的三种形态: 工厂模式是解决对象创建问题的属于创建型设计模式,Spring框架底层使用了大量的工厂模式
第一种:简单工厂模式是工厂方法模式的一种特殊实现,简单工厂模式又叫静态工厂方法模式不属于23种设计模式之一
第二种:工厂方法模式, 是23种设计模式之一
第三种:抽象工厂模式, 是23种设计模式之一
静态工厂模式:
//工厂类角色:根据不同的武器类型不同的生产武器
public class WeaponFactory {
// 根据不同的武器类型生产不同的武器
public static Weapon get(String weaponType){
if (weaponType == null || weaponType.trim().length() == 0) {
return null;
}
Weapon weapon = null;
if ("TANK".equals(weaponType)) {
weapon = new Tank();
} else if ("FIGHTER".equals(weaponType)) {
weapon = new Fighter();
} else {
throw new RuntimeException("不支持该武器!");
}
return weapon;
}
}
编写测试程序,通过指定武器的类型从静态工厂中获取对应的武器
public class Client {
public static void main(String[] args) {
Weapon weapon1 = WeaponFactory.get("TANK");
weapon1.attack();
Weapon weapon2 = WeaponFactory.get("FIGHTER");
weapon2.attack();
}
}
工厂方法模式:
// 具体产品角色:枪
public class Gun extends Weapon{
@Override
public void attack() {
System.out.println("开枪射击!");
}
}
// 具体产品角色:战斗机
public class Fighter extends Weapon{
@Override
public void attack() {
System.out.println("战斗机发射核弹!");
}
}
编写测试程序,获取对应的工厂创建对应的产品
public class Client {
public static void main(String[] args) {
// 这里的new GunFactory()可以采用简单工厂模式进行隐藏,调用WeaponFactory的静态方法根据传递的参数创建对应的工厂
WeaponFactory factory = new GunFactory();
Weapon weapon = factory.get();
weapon.attack();
WeaponFactory factory1 = new FighterFactory();
Weapon weapon1 = factory1.get();
weapon1.attack();
}
}
抽象工厂模式:
抽象工厂角色: 既能生产武器又能生产水果
public abstract class AbstractFactory {
public abstract Weapon getWeapon(String type);
public abstract Fruit getFruit(String type);
}