定义:工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品(百度的定义)
自己理解:
就是多个类似的子类继承同一个接口父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果。
这里我用一个例子详细描述,就以程序员编程序
1.先建立一个程序接口类
public interface Program {
//首先定义是程序,我们简单点,一个程序最起码可以运行
public void running();
}
2定义一个音乐之类
public class MusicProgram implements Program {
// 音乐程序,运行就可以听音乐了音乐了
@Override
public void running() {
// TODO Auto-generated method stub
System.out.println("听个程序员的春天吧……啦啦啦啦啦,我是程序员,我爱敲代码");
}
}
……还可以接着定义视频程序子类和上面差不多
3.定义一个工厂类,来负责判断、控制哪个子类被执行
public class ProgramFactory {
public static Program createProgram(Class c) {
Program program = null;
try {
program = (Program) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
System.out.println("必须指定程序的类型");
} catch (IllegalAccessException e) { // 定义的程序有问题,那就编不出来了,这是...
System.out.println("程序定义错误!");
} catch (ClassNotFoundException e) { // 你随便说程序,现在还没有,我到哪里给你制造去?!
System.out.println("哎,你指定的程序找不到!");
}
return program;
}
}
4.最后是我们的程序员类
public class Programmer {
// 程序来开始编程了
public static void main(String[] args) {
System.out.println("来找个视频软件");
Program moviceProgram = ProgramFactory
.createProgram(VideoProgram.class);
moviceProgram.running();
System.out.println("来找个音乐软件");
Program musicProgram = ProgramFactory.createProgram(MusicProgram.class);
musicProgram.running();
}
}
总结:
之类变化: 接口不变
使用设计模式的一大好处就是可以很容易地对父类做出改变, 利于扩展,而不会破坏更大的程序. 之所以能够容易地做出改变, 秘诀在于保持接口不变, 而只改变内容