栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java设计模式:抽象工厂

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java设计模式:抽象工厂

本文是自己的学习笔记,主要参考以下资料

- 大话设计模式,程杰著,清华大学出版社出版
- 马士兵教育

  • 1、抽象工厂应用场景
  • 2、具体代码
    • 2.1、设计抽象的产品簇


1、抽象工厂应用场景

工厂模式是为了方便生产单一的产品,而抽象工厂则是为了方便生产一个工厂。

一个工厂可以看成是一个产品簇。比如一个人物类。这个人物类需要配套的武器类,攻击方式类,交通工具类等等。那么这些类就可以看成是一个产品簇。

现在我们需要设计两种人物,一个是现代人,一个是魔法世界的人。

对于现代人来说,武器类是枪,攻击方式是开火,交通工具则是汽车。

对于魔法世界人来说,武器类是魔杖,攻击方式吟唱,交通工具则是扫帚。

那现在就有两个产品簇,我们就可以设计一个工厂,让这个工厂能快速方便地生产这两个产品簇。



2、具体代码 2.1、设计抽象的产品簇

首先是建立一个抽象工厂类,里面定义产品簇里需要哪些元素。

public abstract class Character{}
public abstract class Weapon{
	public void attack();
}
public abstract class Vehicle{
	public void move();
}
public abstract class AbstractFactory{
	public Character createCharacter();
	public Weapon createWeapon();
	public Vehicle createVehicle();
}

## 2.2、设计具体的工厂类 那接下来就是继承抽象工厂类 首先是现代人的产品簇
public class modernPeople extends Character{}
public class Gun extends Weapon{
	public void attack(){System.out.println("shoot");}
}
public class Car extends Vehicle{
	public void move(){System.out.println("drive");}
}
public class ModernFactory{
	public Character createCharacter(){return new ModernPeople();}
	public Weapon createWeapon(){return new Gun();}
	public Vehicle createVehicle(){return new Car();}
}

魔法世界人的产品簇

public class MagicPeople extends Character{}
public class MagicStick extends Weapon{
	public void attack(){System.out.println("chant");}	
}
public class Broom extends Vehicle{
	public void move(){System.out.println("fly");}
}
public class MagicFactory{
	public Character createCharacter(){return new MagicPeople ();}
	public Weapon createWeapon(){return new MagicStick ();}
	public Vehicle createVehicle(){return new Broom ();}
}

那使用时就变得非常简单,关于这个人物的所有行为都是一样的写法,如果我们想换一种人,只需要将具体的工厂类替换一下就行。

// AbstractFactory factory = new MagicFactory();
AbstractFactory factory = new ModernFactory();
Character character = factory.createCharacter();
Weapon weapon = factory.createWeapon();
weapon.attack();
Vehicle vehicle = factory.createVehicle();
vehicle.move();
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944273.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号