简介
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,属于创建型模式。当有多个抽象产品时,选用抽象工厂模式。它能够为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
角色
- 多个抽象产品
- 每个抽象产品又有多个具体产品
- 一个抽象工厂
- 多个具体工厂
使用示例
抽象产品1–键盘
interface IKeyboard {
void input();
}
抽象产品2–鼠标
interface IMouse {
void click();
}
抽象产品键盘–对应的具体产品1–联想键盘
class LXKeyboard implements IKeyboard {
public LXKeyboard() {
System.out.println("联想生产的键盘");
}
@Override
public void input() {
System.out.println("用联想键盘输入!");
}
}
抽象产品键盘–对应的具体产品2–华硕键盘
class HSKeyboard implements IKeyboard {
public HSKeyboard() {
System.out.println("华硕生产的键盘");
}
@Override
public void input() {
System.out.println("用华硕键盘输入!");
}
}
抽象产品鼠标–对应的具体产品1–联想鼠标
class LXMouse implements IMouse {
public LXMouse() {
System.out.println("联想生产的鼠标");
}
@Override
public void click() {
System.out.println("用联想鼠标点击!");
}
}
抽象产品鼠标–对应的具体产品2–华硕鼠标
class HSMouse implements IMouse {
public HSMouse() {
System.out.println("华硕生产的鼠标");
}
@Override
public void click() {
System.out.println("用华硕鼠标点击!");
}
}
抽象工厂–电脑生产工厂
abstract class ComputerFactory {
abstract IKeyboard produceKeyboard();
abstract IMouse produceMouse();
}
具体工厂1–联想电脑生产厂
class LxComputerFactory extends ComputerFactory {
public LxComputerFactory() {
System.out.println("这里是联想电脑生产工厂");
}
@Override
IKeyboard produceKeyboard() {
return new LXKeyboard();
}
@Override
IMouse produceMouse() {
return new LXMouse();
}
}
具体工厂2–华硕电脑生产厂
class HsComputerFactory extends ComputerFactory {
public HsComputerFactory() {
System.out.println("这里是华硕电脑生产工厂");
}
@Override
IKeyboard produceKeyboard() {
return new HSKeyboard();
}
@Override
IMouse produceMouse() {
return new HSMouse();
}
}
具体工厂3–组装电脑生产厂
class ZzComputerFactory extends ComputerFactory {
public ZzComputerFactory() {
System.out.println("这里是组装电脑生产工厂");
}
@Override
IKeyboard produceKeyboard() {
return new HSKeyboard();
}
@Override
IMouse produceMouse() {
return new LXMouse();
}
}
测试代码
package org.iti.dm.abstractfactory;
public class AbstractFactoryMode {
public static void main(String[] args) {
ComputerFactory cf = new LxComputerFactory();
IKeyboard keyboard = cf.produceKeyboard();
IMouse mouse = cf.produceMouse();
keyboard.input();
mouse.click();
cf = new HsComputerFactory();
keyboard = cf.produceKeyboard();
mouse = cf.produceMouse();
keyboard.input();
mouse.click();
cf = new ZzComputerFactory();
keyboard = cf.produceKeyboard();
mouse = cf.produceMouse();
keyboard.input();
mouse.click();
}
}
结果如下:
Demo完整代码
package org.iti.dm.abstractfactory;
public class AbstractFactoryMode {
public static void main(String[] args) {
ComputerFactory cf = new LxComputerFactory();
IKeyboard keyboard = cf.produceKeyboard();
IMouse mouse = cf.produceMouse();
keyboard.input();
mouse.click();
cf = new HsComputerFactory();
keyboard = cf.produceKeyboard();
mouse = cf.produceMouse();
keyboard.input();
mouse.click();
cf = new ZzComputerFactory();
keyboard = cf.produceKeyboard();
mouse = cf.produceMouse();
keyboard.input();
mouse.click();
}
}
interface IKeyboard {
void input();
}
interface IMouse {
void click();
}
class HSKeyboard implements IKeyboard {
public HSKeyboard() {
System.out.println("华硕生产的键盘");
}
@Override
public void input() {
System.out.println("用华硕键盘输入!");
}
}
class LXKeyboard implements IKeyboard {
public LXKeyboard() {
System.out.println("联想生产的键盘");
}
@Override
public void input() {
System.out.println("用联想键盘输入!");
}
}
class HSMouse implements IMouse {
public HSMouse() {
System.out.println("华硕生产的鼠标");
}
@Override
public void click() {
System.out.println("用华硕鼠标点击!");
}
}
class LXMouse implements IMouse {
public LXMouse() {
System.out.println("联想生产的鼠标");
}
@Override
public void click() {
System.out.println("用联想鼠标点击!");
}
}
abstract class ComputerFactory {
abstract IKeyboard produceKeyboard();
abstract IMouse produceMouse();
}
class LxComputerFactory extends ComputerFactory {
public LxComputerFactory() {
System.out.println("这里是联想电脑生产工厂");
}
@Override
IKeyboard produceKeyboard() {
return new LXKeyboard();
}
@Override
IMouse produceMouse() {
return new LXMouse();
}
}
class HsComputerFactory extends ComputerFactory {
public HsComputerFactory() {
System.out.println("这里是华硕电脑生产工厂");
}
@Override
IKeyboard produceKeyboard() {
return new HSKeyboard();
}
@Override
IMouse produceMouse() {
return new HSMouse();
}
}
class ZzComputerFactory extends ComputerFactory {
public ZzComputerFactory() {
System.out.println("这里是组装电脑生产工厂");
}
@Override
IKeyboard produceKeyboard() {
return new HSKeyboard();
}
@Override
IMouse produceMouse() {
return new LXMouse();
}
}