首页 > 代码库 > 设计模式之简单工厂模式
设计模式之简单工厂模式
简单工厂模式属于工厂模式的一种,工厂模式总共有三种,分别是简单工厂模式,工厂方法模式和抽象工厂模式,三者有一个共同点,就是对象的创建都交给了工厂去做。从简单工厂模式到抽象工厂模式,抽象级别逐渐升高。
工厂模式包括三个部分:工厂角色,抽象产品角色和具体产品角色。
工厂角色是工厂模式的核心,由它决定创建哪个产品角色,由于每个具体产品角色都实现了同一个接口,因此创建哪个角色的问题可以放到工厂中解决,而不用在客户端解决。
详细例子如下:选取网上常用到的例子,富翁,司机和三辆车(奔驰,宝马和奥迪)。在没用到设计模式之前,富翁坐上了奔驰车,要说“开奔驰车”,车才会开(个人觉得这个例子怪怪的,暂时就这么理解吧),然后我们来看看用了简单工厂模式会怎么样。
首先先确定角色:
1.抽象产品角色(要先有产品工厂才能生产)
1 public interface Car {2 public void drive();3 }
2.具体产品角色
1 public class Audi implements Car {2 3 @Override4 public void drive() {5 System.out.println("Drive Audi");6 }7 8 }
1 public class Benz implements Car {2 3 @Override4 public void drive() {5 System.out.println("Drive Benz");6 }7 8 }
1 public class BMW implements Car {2 3 @Override4 public void drive() {5 System.out.println("Drive BMW");6 }7 8 }
3.工厂角色
1 public class Driver { 2 public static Car driveCar(String car){ 3 if(car.equalsIgnoreCase("Benz")) 4 return new Benz(); 5 if(car.equalsIgnoreCase("BMW")) 6 return new BMW(); 7 if(car.equalsIgnoreCase("Audi")) 8 return new Audi(); 9 else{10 System.out.println("车库中暂时没有这个车");11 return null;12 }13 }14 }
然后写一个客户端测试一下
1 public class TestDriver {2 @Test3 public void Magnate() throws Exception{4 Car car = Driver.driveCar("Benz");5 car.drive();6 }7 }
这里的代码有个小bug,就是在客户端输入一个不存在的车名是会出现异常,但是这并不妨碍我们了解简单工厂模式,所以无需计较。
可以看到,工厂角色是整个代码的核心。简单工厂模式的好处在于不需要把具体类直接暴露给客户端,另外,代码中的逻辑判断都在工厂角色中,所以客户端不需要负责太多功能。而缺点则在于违反了开闭原则。可以看到,如果富翁增加了一辆车,需要修改具体产品角色和工厂角色,在这样一个小例子看起来可能微不足道,但如果是在一个非常大的项目里面, 很有可能会牵一发而动全身。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。