在以前的文章里面讲述过简单工厂模式,见链接:http://www.cnblogs.com/zhuxiansheng/p/7873161.html
简单工厂模式解耦了客户端和实现的依赖,不过如果有再次扩展实现的话,我们不得不去修改工厂当中的选择分支,来添加case,然后添加新的实现,这违背了开放-关闭原则。如何解决这个问题,工厂模式给了很好的解答。
大话设计模式-类图
大话设计模式中的例子代码如下:
- /**
- * 工厂接口
- */
- public interface IFactory {
- public LeiFeng createLeiFeng();
- }
- /**
- * 父类
- */
- public class LeiFeng {
- public void sweep() {
- System.out.println("扫地");
- }
- public void buyRice() {
- System.out.println("买米");
- }
- public void wash() {
- System.out.println("洗碗");
- }
- }
- /**
- * 子类
- */
- public class Undergraduate extends LeiFeng {
- }
- /**
- * 子类
- */
- public class Volunteer extends LeiFeng {
- }
- /**
- * 志愿者工厂
- */
- public class UndergraduteFactory implements IFactory{
- @Override
- public LeiFeng createLeiFeng() {
- return new Undergraduate();
- }
- }
- /**
- * 大学生工厂
- */
- public class VolunteerFactory implements IFactory{
- @Override
- public LeiFeng createLeiFeng() {
- return new Volunteer();
- }
- }
- /**
- * 客户端
- */
- public class Test {
- public static void main(String[] args) {
- IFactory volunteerFactory = new VolunteerFactory();
- LeiFeng leiFeng = volunteerFactory.createLeiFeng();
- leiFeng.sweep();
- leiFeng.buyRice();
- leiFeng.wash();
- }
- }
如果在添加别的角色,我们只需要添加对应的工厂和角色domain就可以实现在不修改原代码同时添加新的实现,针对工厂符合了开放-关闭原则,不过针对客户端我们还是要修改创建哪个具体工厂的代码。
回想一下简单工厂模式,如果我们在扩展M的N次方时,我们只需要实现计算工厂接口,然后在添加具体的计算类,就实现了实现的扩展,这是笔者对简单工厂和工厂模式的理解,希望能帮助学习工厂模式的童鞋!
来源: http://www.cnblogs.com/zhuxiansheng/p/7904395.html