抽象工厂

编程

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 优点

  1. 具体产品在应用层代码隔离,无须关心创建细节
  2. 将一系列的产品族统一到一起创建

4.2 缺点

  1. 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口
  2. 增加了系统的抽象性和理解难度

以上是 抽象工厂 的全部内容, 来源链接: utcz.com/z/516901.html

回到顶部