工厂方法模式:
工厂方法模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期拓展的目的。
工厂方法模式的意义是定义一个创建产品的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
工厂方法经常用在以下两种情况中:第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。
一个学生接口:default可以解决合并复用原则
public interface StudentDao {
public void beadTime();
public void schoolTime();
default void school() {
System.out.println("西安工业大学");
}
}
一个学生实现类:
public class Student1 implements StudentDao{
@Override
public void beadTime() {
// TODO Auto-generated method stub
System.out.println("6点");
}
@Override
public void schoolTime() {
// TODO Auto-generated method stub
System.out.println("7点");
}
}
一个学生工厂:
public interface StudentFactory {
public StudentDao chose();
}
一个工厂实现类:
public class Student1Impl implements StudentFactory{
@Override
public StudentDao chose() {
return new Student1();
}
}
调用:
public class User {
public static void main(String[] args) {
StudentDao ss = new Student1Impl().chose();
ss.beadTime();
ss.schoolTime();
ss.school();
}
}
定义学生工厂和实现类为了实现设计模式的总原则:合并原则。可以拓展程序,不用修改程序。
如果再来有个学生,增加一个学生实现类,再增加一个工厂实现类即可。不用修改其他程序。