设计模式——工厂方法模式

定义

工厂方法模式是我们开发中使用频率非常高的一个设计模式,比如大名鼎鼎的SPRING框架,IOC就是工厂方法模式,工厂模式定义为:定义一个用于创建对象的接口,让自雷决定实例化那一个类。工厂方式使用一个类的实例化延迟到其子类。

简单工厂模式

假设一个模块只需要一个鼠标产品工厂类,类图如下:
image.png

代码实现:

/**
 * 鼠标抽象接口
 */
public interface Mouse {
    /**
 * 滚轮
 */
 void roller();
}

/**
 * 我是A鼠标
 */
public class AMouse implements Mouse {
 @Override
 public void roller() {
    }
}


/**
 * 我是B鼠标
 */
public class BMouse implements Mouse {
 @Override
 public void roller() {
    }
}


/**
 * 鼠标产品工厂类
 */
public class MouseProductFactory {
    public static Mouse createMouse(Class mouseClass){
        Mouse mouse = null;
        try {
            mouse = (Mouse) Class.forName(mouseClass.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mouse;
    }
}


/**
 * 客户端类
 */
public class Client {
    public static void main(String[] args) {
        Mouse mouse = MouseProductFactory.createMouse(AMouse.class);
        mouse.roller();
    }
}

优点

1.良好的封装性,代码结构清晰。如果一个对象需要一个具体的产品对象,只需要知道这个产品的类名/约束字符串就饿可以了,不需要知道创建对象的坚信过程,降低模块间的耦合
2.扩展性好,在新增产品的情况下,只需要具体的工厂类或者扩展一个工厂类就可以完成。
3.屏蔽产品类。调用者只需要知道产品接口,不需要关注产品的实现过程。
4.工厂模式是典型的接口框架,高层模块只需要知道抽象接口类,不需要关心具体的实现。符合迪米特法则,我们不需要的不用去交流,也符合依赖倒置原则,只依赖产品的抽象类。

阅读 66

推荐阅读