工厂模式分为三种
- 第一种:简单工厂模式 不属于23种设计模式之一 也叫静态工厂方法模式,是工厂模式的一种特殊实现。
- 第二种:工厂方法模式 二十三种设计模式之一
- 第三种:抽象工厂模式 二十三种设计模式之一
简单工厂模式的角色包括三个:
- 抽象产品角色
- 具体产品角色
- 工厂类角色
具体代码实现
抽象产品
package com.fs.factory;
public abstract class Weapon {
public abstract void attack();
}
具体产品角色:
package com.fs.factory;
public class Tank extends Weapon{
@Override
public void attack() {
System.out.println("坦克开炮!");
}
}
package com.fs.factory;
public class Fighter extends Weapon{
@Override
public void attack() {
System.out.println("战斗机投下原子弹!");
}
}
package com.fs.factory;
public class Dagger extends Weapon{
@Override
public void attack() {
System.out.println("砍他丫的!");
}
}
工厂类角色:
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 if ("DAGGER".equals(weaponType)) {
weapon = new Dagger();
} 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();
Weapon weapon3 = WeaponFactory.get("DAGGER");
weapon3.attack();
}
}
优点:
使用者不用担心对象创建的细节,只需要向工厂索要即可,实现分离,对象的创建和使用。
缺点:
不符合OCP原则(开闭原则) 如果后续对程序进行拓展则需要修改工厂类