java 之 工厂模式(大话设计模式)

在以前的文章里面讲述过简单工厂模式,见链接: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次方时,我们只需要实现计算工厂接口,然后在添加具体的计算类,就实现了实现的扩展,这是笔者对简单工厂和工厂模式的理解,希望能帮助学习工厂模式的童鞋!

posted @ 2017-11-27 15:32  红尾巴的猪  阅读(746)  评论(0编辑  收藏  举报