【JAVA】:抽象工厂模型
усил の博客 2020/5/24 Java
# 抽象工厂模型
一、什么是抽象工厂模型 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂其他工厂。其他工厂生成产品(工厂模型),这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
二、现实生活举例 有一个厂商专门生成鼠标和键盘,其旗下有俩个公司,分别是戴尔和惠普俩个工厂,分别生产戴尔鼠标、戴尔键盘和惠普鼠标、惠普键盘。
三、优缺点 (1)当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 (2)产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator(工厂类) 里加代码,又要在具体的里面加代码。
四、实现方法 步骤一:定义俩个接口
//戴尔产品
public interface Daleproduct {
void daleproduct();
}
//惠普产品
public interface Hpproduct {
public void hpproduct();
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
步骤二:接口实现类
public class Dale_Mouse implements Daleproduct{
public void daleproduct() {
System.out.println("生产一个戴尔品牌鼠标");
}
}
public class Dale_Keyboard implements Daleproduct{
public void daleproduct() {
System.out.println("生产一个戴尔品牌键盘");
}
}
public class Hp_Mouse implements Hpproduct {
public void hpproduct() {
System.out.println("生产一个惠普品牌鼠标");
}
}
public class Hp_Keyboard implements Hpproduct {
public void hpproduct() {
System.out.println("生产一个惠普品牌键盘");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
步骤三:创建抽象工厂
//为 Dale 和 Hp 对象创建抽象类来获取工厂。
public abstract class AbstractFactory {
public abstract Dale getdale(String dale );
public abstract Hp gethp(String hp );
}
1
2
3
4
5
2
3
4
5
步骤四:创建戴尔和惠普工厂
//戴尔工厂
public class Dalefactory extends AbstractFactory{
public Dale getdale(String dale) {
if(dale==null){
return null;
}else if(dale.equalsIgnoreCase("DALE_MOUSE")){
return new Dale_Mouse();
}else if(dale.equalsIgnoreCase("DALE_KEYBOARD")){
return new Dale_Keyboard();
}
return null;
}
public Hp gethp(String hp) {
return null;
}
}
//惠普工厂
public class Hpfactory extends AbstractFactory{
public dale getdale(String dale) {
return null;
}
public Hp gethp(String hp) {
if(hp==null){
return null;
}else if(dale.equalsIgnoreCase("HP_MOUSE")){
return new Hp_Mouse();
}else if(dale.equalsIgnoreCase("HP_KEYBOARD")){
return new Hp_Keyboard();
}
return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
步骤五:超级工厂(生产惠普和戴尔工厂)
public class Supperfactory {
public static AbstractFactory getfactory(String choice){
if(choice.equalsIgnoreCase("DALEFACTORY")){
return new Dalefactory ();
}else if(choice.equalsIgnoreCase("HPFACTORY")){
return new Hpfactory();
}else if(choice==null){
return null;
}
return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
步骤六:测试(生产产品)
public class Demo {
public static void main(String[] args) {
//获取戴尔工厂
AbstractFactory dale_factory=SupperProducer.getfactory("DALEFACTORY");
//生产戴尔产品
Dale_Mouse dmouse=dale_factory.getdale("DALE_MOUSE");
Dale_Keyboard dkeyboard=dale_factory.getdale("DALE_KEYBOARD");
dmouse.daleproduct();
dkeyboard.daleproduct();
//获取惠普工厂
AbstractFactory hp_factory=FactoryProducer.getfactory("HPFACTORY");
//生产惠普产品
Hp_Mouse hmouse=hp_factory.getdale("HP_MOUSE");
Hp_Keyboard hkeyboard=hp_factory.getdale("HP_KEYBOARD");
hmouse.hpproduct();
hkeyboard.hpproduct();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
输出结果: