抽象工厂
1. 介绍
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。工厂模式" title="抽象工厂模式">抽象工厂模式又称为Kit模式,属于对象创建型模式,是工厂方法模式的升级版,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
2. 场景说明
一般这类场景用于不同的操作系统,在window中有自己的一套底层代码,在mac系统也有自己的一套底层代码,但是流程相同,即存在产品族的概念.
代码模拟场景为:现在有两款游戏,有魔法世界和现实世界两种风格,但是游戏内容一致(真实游戏不会这么玩)
3. 代码实现
3. 1 具体的操作接口类
//吃public interface Food {
void printName();
}
//走
public interface Vehicle {
void go();
}
//攻击
public interface Weapon {
void shoot();
}
3. 2 操作接口实现类
3.2.1 魔法实现类
public class Broom implements Vehicle {
@Override
public void go() {
System.out.println("broom go wuwuwuwuw....");
}
}
public class MagicStick implements Weapon {
@Override
public void shoot() {
System.out.println("diandian....");
}
}
public class MushRoom implements Food {
@Override
public void printName() {
System.out.println("dmg");
}
}
3.2.2 现实实现类
public class Car implements Vehicle { @Override
public void go() {
System.out.println("Car go wuwuwuwuw....");
}
}
public class AK47 implements Weapon {
@Override
public void shoot() {
System.out.println("tututututu....");
}
}
public class Bread implements Food {
@Override
public void printName() {
System.out.println("wdm");
}
}
3.3 抽象工厂
3.3.1 抽象工厂接口
public abstract class AbastractFactory { public abstract Food createFood();
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
}
3.3.2 抽象工厂实现类
3.3.2.1 魔法世界抽象实现
public class MagicFactory extends AbastractFactory { @Override
public Food createFood() {
return new MushRoom();
}
@Override
public Vehicle createVehicle() {
return new Broom();
}
@Override
public Weapon createWeapon() {
return new MagicStick();
}
}
3.3.2.2 现实世界抽象实现
public class ModernFactory extends AbastractFactory { @Override
public Food createFood() {
return new Bread();
}
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
}
3.4 入口调用
public class Main { public static void main(String[] args) {
//AbastractFactory f = new ModernFactory(); 具体调用那个工厂实现类可以在配置文件中写清楚
AbastractFactory f = new MagicFactory();
Vehicle c = f.createVehicle();
c.go();
Weapon w = f.createWeapon();
w.shoot();
Food b = f.createFood();
b.printName();
}
}
4. 优缺点
4.1 优点
- 具体产品在应用层代码隔离,无须关心创建细节
- 将一系列的产品族统一到一起创建
4.2 缺点
- 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口
- 增加了系统的抽象性和理解难度
以上是 抽象工厂 的全部内容, 来源链接: utcz.com/z/516901.html