简单工厂模式

模式定义

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

模式结构

模式结构

代码实现

public interface Human {
    void print();
}

public class Man implements Human {
    public void print() {
        System.out.println("我是男人");
    }
}

public class Woman implements Human {
    public void print() {
        System.out.println("我是女人");
    }
}

//这里也可以不用传入参数创建对象,可以使用读取配置,通过反射创建对象
public class HumanFactory {
    public Human createHuman(String type){
        if("man".equals(type)){
            return new Man();
        }else if("woman".equals(type)){
            return new Woman();
        }else {
            return null;
        }
    }
}

public class Client {
    public static void main(String[] args) {
        HumanFactory factory = new HumanFactory();
        Human man = factory.createHuman("man");
        man.print();
    }
}


模式的优缺点

优点

  1. 封装
    使组件外部能真正面向接口编程。

  2. 解耦
    通过简单工厂,实现了客户端和具体实现类的解耦。

缺点

  1. 可能增加客户端的复杂度

  2. 不方便扩展子工厂
    私有化简单工厂的构造方法,使用静态方法来创建接口,也就不能通过写简单工厂类的子类来改变创建接口的方法的行为了。

思考

模式本质:选择实现

  1. 简单工厂的重点在选择,实现是已经做好了的。就算实现再简单,也要由具体的实现类来实现,而不是在简单工厂里面来实现。简单工厂的目的在于为客户端来选择相应的实现,从而使得客户端和实现之间解耦。

  2. 难点在“如何选择”实现,参数传递可以是静态的参数,也可以是动态的参数。比如:运行期间。由工厂去读取某个内存的值,或者去读取数据库中的值,然后根据这个值来选择具体的实现等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容