目录
一、定义与类型
定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类
类型:创建型
二、使用场景
- 客户端不依赖于产品类实例如何被创建、实现等细节
- 强调一系列相关的产品对象(属于统一产品族)一起使用创建对象需要大量重复的代码
- 提供一个产品类的库,所以的产品以同样的接口出现,从而使客户端不依赖具体实现
三、优缺点
- 优点
- 具体产品在应用层代码隔离,无须关系创建细节
- 将一个系列的产品统一到一起创建
缺点- 规定了所有可能被创建的产品集合,产品族扩展新的产品困难,需要修改抽象工厂的接口
- 增加了系统的抽象性和理解难度
四、代码实例现
创建电脑工厂
public interface Pc {
void play();
void trunOff();
void trunOn();
void music();
}
模拟戴尔厂商制造电脑
public class DellPc implements Pc{
@Override
public void play() {
System.out.println("戴尔电脑打游戏");
}
@Override
public void trunOff() {
System.out.println("戴尔电脑关机");
}
@Override
public void trunOn() {
System.out.println("戴尔电脑开机");
}
@Override
public void music() {
System.out.println("戴尔电脑听歌");
}
}
模拟微星厂商制造电脑
public class MsiPc implements Pc {
@Override
public void play() {
System.out.println("微星电脑打游戏");
}
@Override
public void trunOff() {
System.out.println("微星电脑关机");
}
@Override
public void trunOn() {
System.out.println("微星电脑开机");
}
@Override
public void music() {
System.out.println("微星电脑听歌");
}
}
模拟鼠标工厂
public interface Mouse {
void start();
void shutdown();
void setting();
}
模拟戴尔制造鼠标
public class DellMouse implements Mouse {
@Override
public void start() {
System.out.println("戴尔鼠标使用");
}
@Override
public void shutdown() {
System.out.println("戴尔鼠标放置");
}
@Override
public void setting() {
System.out.println("戴尔鼠标设置");
}
}
模拟微星制造鼠标
public class MsiMouse implements Mouse {
@Override
public void start() {
System.out.println("微星鼠标使用");
}
@Override
public void shutdown() {
System.out.println("微星鼠标放置");
}
@Override
public void setting() {
System.out.println("微星鼠标设置");
}
}
创建抽象产品工厂
public interface IProductFactory {
Pc pc();
Mouse mouse();
}
创建戴尔工厂
public class DellIProductFactory implements IProductFactory {
@Override
public Pc pc() {
return new DellPc();
}
@Override
public Mouse mouse() {
return new DellMouse();
}
}
创建微星工厂
public class MsiIProductFactory implements IProductFactory {
@Override
public Pc pc() {
return new MsiPc();
}
@Override
public Mouse mouse() {
return new MsiMouse();
}
}
创建客户端
public class Client {
public static void main(String[] args){
System.out.println("=============戴尔系列产品=========");
//戴尔工厂
DellIProductFactory dellIProductFactory = new DellIProductFactory();
Pc pc = dellIProductFactory.pc();
pc.music();
pc.play();
Mouse mouse = dellIProductFactory.mouse();
mouse.setting();
System.out.println("=============微星系列产品=========");
//微星工厂
MsiIProductFactory msiIProductFactory = new MsiIProductFactory();
pc = msiIProductFactory.pc();
pc.music();
pc.play();
mouse = msiIProductFactory.mouse();
mouse.setting();
}
}
抽象工厂主要分为4类:
AbstractFactory
:抽象工厂角色,它声明了一组用于创建一种产品的方法,每一个方法对应一种产品ConcreteFactory
:具体工厂角色,它实现了在抽象工厂中定义的创建产品的方法,生产一组具体产品,这饿产品构件成了一个产品种类,每一个产品都位于某个产品等级结构中AbstractProduct
:抽象产品角色,为每种产品声明接口ConcreteProduct
:具体产品角色,定义了工厂生产的具体产品对象,实现抽象产品接口声明的业务方法