什么是简单工厂设计模式?
工厂是生产零部件的地方,在程序中简单工厂就是生产对象.其实简单工厂是设计模式里面一个较为简单的设计模式,也是比较常用的设计模式之一.
为什么要用简单工厂设计模式?
例如我们写一个飞行游戏程序,其中飞机的各种子弹是需要不停的new的.那么在程序中我们需要更具不同的子弹类型产生不同子弹对象.
switch(bullettype){
case bullettype1:
new 类型1子弹;
break;
case bullettype2:
new 类型2子弹;
break;
case bullettype3:
new 类型3子弹;
break;
}
这样一段代码要是直接写在某一个类里是会增加耦合度的,所以我们要对这段代码进行封装.下面用到的封装风格就是简单工厂设计模式了.
封装有三个好处这里顺便提一下:
(1)降低耦合
(2)封装出来的类在内部可以实现自由修改
(3)类具有清晰的对外接口
怎么用简单工厂设计模式?
简单工厂UML
下面是代码部分:
BulletFactory.class
public class BulletFactory {
public static final int BULLETTYPEONE = 0;
public static final int BULLETTYPETWO = 1;
public static final int BULLETTYPETHREE = 2;
public static Bullet createBullet(int bulletType){
switch(bulletType){
case BULLETTYPEONE:
return new TypeOneBullet();
case BULLETTYPETWO:
return new TypeTwoBullet();
case BULLETTYPETHREE:
return new TypeThreeBullet();
default:
return null;
}
}
}
Bullet.class
public class Bullet {
}
TypeOneBullet.class
public class TypeOneBullet extends Bullet{
public TypeOneBullet(){
System.out.println("产生出类型一子弹");
}
}
TypeTwoBullet.class
public class TypeTwoBullet extends Bullet{
public TypeTwoBullet(){
System.out.println("产生出类型二子弹");
}
}
TypeThreeBullet.class
public class TypeThreeBullet extends Bullet{
public TypeThreeBullet(){
System.out.println("产生出类型三子弹");
}
}
最后写了一个Main.class来实现以上类的功能.
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BulletFactory.createBullet(BulletFactory.BULLETTYPEONE);
BulletFactory.createBullet(BulletFactory.BULLETTYPETWO);
BulletFactory.createBullet(BulletFactory.BULLETTYPETHREE);
}
}
运行结果如下:
产生出类型一子弹
产生出类型二子弹
产生出类型三子弹
总结:
简单工厂设计模式体现了类封装的优点,使得代码耦合性降低,类与类之间的关系简洁明了.