简单工厂设计模式

前言

简单工厂模式又叫静态工厂设计模式。通俗的讲,就是通过专门定义一个类来负责建立其他类的实例,与此同时被创建的类都必须满足他们有共同的父类,所以,它是一种创建型模式。

Alt text
这里Leesin(盲僧)与Js(剑圣)继承Jungle(打野),而JungleFactory(打野生产工厂)产生具体打野对象
下面将以简单工厂创建他们,满足通过传入打野工厂不同的参数,产生不同的打野对象

打野接口

1
2
3
4
5
6
7
8
9
10
11
12
13
//打野英雄
public interface Jungle {
//gank能力强
public void gankenemy();
//本身足够灵活
public void flexible();
//打野不太伤
public void killbeast();
}

盲僧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class LeeSin implements Jungle {
@Override
public void gankenemy() {
System.out.println("盲僧正在gank");
}
@Override
public void flexible() {
System.out.println("盲僧太灵活了");
}
@Override
public void killbeast() {
System.out.println("盲僧正在打野怪");
}
}

剑圣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Js implements Jungle {
@Override
public void gankenemy() {
System.out.println("剑圣正在gank");
}
@Override
public void flexible() {
System.out.println("js也灵活");
}
@Override
public void killbeast() {
System.out.println("剑圣正在打野");
}
}

打野工厂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class JungleFactory {
public static Jungle createJungle(String Junglename){
Jungle jungle=null;
switch(Junglename){
case "LeeSin":
jungle=new LeeSin();
break;
case "Js" :
jungle=new Js();
break;
default :
break;
}
return jungle;
}
}

下面是测试类

1
2
3
4
5
public static void main(String[] args) {
Jungle jungle= JungleFactory.createJungle("LeeSin");
jungle.gankenemy();
}

当然,我们这里通过不同的参数,获得不同的打野英雄
当然这个例子也很好理解简单工厂

事实上,我们知道如果我们一开始用的是sql server数据库,然后我们想换数据库,如果不用工厂模式,那么将替换许多东西,如果这时,使用简单工厂模式,就会使问题变简单许多。

利用简单工厂模式大概思路就是先创建一个抽象数据库(DBobject),然后是具体实现类sql server与mysql类,然后再来一个生成数据库工厂(DBobjectFactory)通过传入不同的数据库参数,从而连接不同的数据库

至此我们发现,简单工厂的优点在于工厂类中包含了必要的逻辑判断,而且可以根据客户端的选择条件不同而动态的实例化相关的类

当然它的缺点也很明显,当我们创建的抽象实例过多时,显然高内聚就增多了,不利于维护了

热评文章