您的位置:首页 > 编程语言 > Java开发

Java抽象工厂模式之理解

2018-03-12 21:19 253 查看

抽象工厂模式

思考

在理解为什么使用这个模式之前,我们考虑这样一个场景:

有两种设备:鼠标(Mouse)和键盘(Keyboard)。

有两种品牌的鼠标和键盘,罗技鼠标,罗技键盘,雷蛇鼠标,雷蛇键盘。

有一个生产外设的工厂接口(PeripheralFactory)专门用来生产鼠标和键盘。

有两个商家都生产外设,罗技和雷蛇,他们都有自己的生产工厂分别是。(LogitechPeripheralFactory)、(RazerPeripheralFactory),他们都实现外设工厂接口。

当我们需要一个鼠标或者键盘的时候,我们都可以通过对应的工厂来生产不同品牌的鼠标或者键盘。

类图



代码:

键盘

//键盘
public interface KeyBoard {

public String click();

}
//具体键盘 罗技键盘
public class LogitechKeyBoard implements KeyBoard{

@Override
public String click() {
// TODO Auto-generated method stub
return "罗技键盘按下";
}

}
//具体键盘 雷蛇键盘
public class RazerKeyBoard implements KeyBoard {

@Override
public String click() {
// TODO Auto-generated method stub
return "雷蛇键盘按下";
}

}


鼠标

//鼠标
public interface Mouse {

public String move();

}
//具体鼠标 罗技鼠标
public class LogitechMouse implements Mouse{

@Override
public String move() {
// TODO Auto-generated method stub
return "罗技鼠标移动";
}

}
//具体鼠标 雷蛇鼠标
public class RazerMouse implements Mouse{

@Override
public String move() {
// TODO Auto-generated method stub
return "雷蛇鼠标移动";
}

}


工厂

//工厂,提供生产鼠标和键盘的功能
public interface PeripheralFactory {

Mouse createMouse();
KeyBoard createKeyBoard();
}
//罗技工厂,生产罗技品牌的鼠标和键盘
public class LogitechPeripheralFactory implements PeripheralFactory {

@Override
public Mouse createMouse() {
// TODO Auto-generated method stub
return new LogitechMouse();
}

@Override
public KeyBoard createKeyBoard() {
// TODO Auto-generated method stub
return new LogitechKeyBoard();
}

}
//雷蛇工厂,生产雷蛇品牌的鼠标和键盘
public class RazerPeripheralFactory implements PeripheralFactory {

@Override
public Mouse createMouse() {
// TODO Auto-generated method stub
return new RazerMouse();
}

@Override
public KeyBoard createKeyBoard() {
// TODO Auto-generated method stub
return new RazerKeyBoard();
}

}


测试

public class Test {
public static void main(String[] args) {
PeripheralFactory lFactory = new LogitechPeripheralFactory();
PeripheralFactory rFactory = new RazerPeripheralFactory();

Mouse lMouse = lFactory.createMouse();
KeyBoard lKeyBoard = lFactory.createKeyBoard();

Mouse rMouse = rFactory.createMouse();
KeyBoard rKeyBoard = rFactory.createKeyBoard();

System.out.println(lMouse.move());
System.out.println(lKeyBoard.click());
System.out.println(rMouse.move());
System.out.println(rKeyBoard.click());
}
}


结果

罗技鼠标移动

罗技键盘按下

雷蛇鼠标移动

雷蛇键盘按下

总结

我们通过创建两种不同的工厂,生产出了属于不同类型的鼠标和键盘,这里面,鼠标和键盘被成为产品族,产品族就是一个工厂所能生产的所有产品,产品族可被多种工厂生产出来。假如我们现在又出现了一个品牌S,这个品牌也是生产这个产品族的,那么我们就可以创建一个新的工厂来生成,保证了原有代码的不变就可以添加新的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: