设计模式-抽象工厂模式

最近在学习设计模式,之前断断续续的看过好多,自己也没有专门的练习和深入了解过,一直感觉对应设计模式相关的东西还是处于懵懂状态,这次下定决心好好的学习一下,所以做一个笔记用来督促自己。
资料收集与以下网站,如有冒犯,烦请告知

https://www.runoob.com/design-pattern/design-pattern-tutorial.html

https://www.cnblogs.com/XiOrang/p/9410851.html


简单说明

  1. 抽象工厂模式,主要是围绕着一个超级工厂创建其它工厂的模式。
  2. 这个设计模式,将产品归类为多个产品族,每个单品族单独管理产品。
  3. 抽象工厂模式有多个产品。
  4. 编不下去了!!!我承认我就是个菜狗

简单理解

  1. 需要定义多个产品接口,包含各产品的共通的东西。
  2. 各产品实现上面的接口
  3. 定义工厂类用于生产
  4. 定义超级工厂类,用于管理上面的小工厂

之前工厂模式的时候,用了一个coder的例子。这里我把coder的技能单独比做产品来使用,不是很合适,勉强看一下吧。

1.定义产品接口

1
2
3
4
//可能会的技能
public class Coding{
void run();
}
1
2
3
4
//必会的技能
public class WriteBugs{
void run();
}

2.实现产品接口

1
2
3
4
5
6
public class AndroidCoding implements Coding{
@Override
public void run(){
System.out.pringln("Android程序员写了一段代码");
}
}
1
2
3
4
5
6
public class IosCoding implements Coding{
@Override
public void run(){
System.out.pringln("Ios程序员没写代码");
}
}
1
2
3
4
5
6
public class AndroidBugs implements WriteBugs{
@Override
public void run(){
System.out.pringln("Android程序员说没有bug的日子好寂寞啊!!!");
}
}
1
2
3
4
5
6
public class IosBugs implements WriteBugs{
@Override
public void run(){
System.out.pringln("Ios程序员说这些bug哪来的啊!!!");
}
}

3.创建超级工厂抽象类

1
2
3
4
public abstract class AbstractFactory{
public abstract Coding getCoding();
public abstract WriteBugs getBugs();
}

4.创建小工厂,扩展超级工厂

1
2
3
4
5
6
7
8
9
10
public class AndroidFactory extends AbstractFactory{
@Override
public Coding getCoding(){
return new AndroidCoding();
}
@Override
public WriteBugs getBugs(){
return new AndroidBugs();
}
}
1
2
3
4
5
6
7
8
9
10
public class IosFactory extends AbstractFactory{
@Override
public Coding getCoding(){
return new IosCoding();
}
@Override
public WriteBugs getBugs(){
return new IosBugs();
}
}

5.创建一个工厂生成器

1
2
3
4
5
6
7
8
9
10
public class FactoryProducer{
public static AbstractFactory getFactory(String type){
if("ANDROID".equalsIgnoreCase(type)){
return new AndroidFactory();
}else if("IOS".equalsIgnoreCase(type)){
return new IosFactory();
}
return null;
}
}

6.使用过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test{
public static void main(Strign[] args){
AbstractFactory android = FactoryProducer.getFactory("Android");
Coding androidCoding = android.getCoding();
WriteBugs androidBugs = android.getBugs();
androidCoding.run();
androidBugs.run();

AbstractFactory ios = FactoryProducer.getFactory("IOS");
Coding iosCoding = ios.getCoding();
WriteBugs iosBugs = ios.getBugs();
iosCoding.run();
iosBugs.run();

}
}

感觉菜鸟教程的抽象工厂模式有点问题,不知道是不是我的理解有错误。

个人觉得抽象工厂里面的小工厂应该是包含多个不同类型产品的工厂

菜鸟的教程是包含多个同一类型的产品