简单工厂模式
简单工厂模式根据提供给他的数据,返回几个可能类中的一个类的实例,通常它返回的类都有一个共同的父类和共同的方法,但每个方法的执行的任务不同。
简单工厂能返回具有同样方法的类的实例,他们可以是不同的派生类的实例,也可以是实际上毫无关系仅仅是享用了相同接口的类,这些类实例中的方法必须是相同的,并且能够被交替使用。
工厂模式
工厂方法模式对简单工厂模式进行巧妙的扩展,它不是一个专门的类来决定实例化哪一个子类。相反,超类把这种决定延迟到每个子类,这种模式实际上没有决策点,即没有直接选择一个子类实例化的决策。按这种模式编写的程序定义了一个抽象类,它去创建对象,但让子类来决定创建哪一种对象。
使用工厂方法的情况:
1 一个类无法预测它要创建的对象属于哪一个类
2 一个类用它的子类来指定所创建的对象
3 把要创建哪一个类的信息局部化的时候
抽象工厂模式
抽象工厂模式比工厂模式具有更高层次的抽象性,当要返回一系列相关类中的某一个,而每个类都能根据需要返回不同的对象时,可以使用这种模式。
抽象工厂的一个主要目的是它能隔离要生成的具体类,这些类的实际类名隐藏在工厂里,在客户端根本不需要知道。由于类的隔离,可以自由改动或交换这些生成类系列。此外,由于只生成一类具体的类,系统会避免读者误用不同生成系列中的类。
尽管抽象工厂生成的所有类都具有相同的基类,但还是无法避免某些子类具有额外的,与其他类不同的方法。
两种解决方案:
1 在基类中定义所有的方法,即使这些方法没有实际的功能
2 再派生出新的基类接口,它包含所有方法和所有类型的子类