设计模式 (2) 工厂方法模式:简单工厂模式的缺点:简单厂模式的最大缺点 —— 不完全满足 OCP。OCP [开闭原则],其核心思想是:一个类对扩展开方,对修改关闭。说通俗点就是,如果再添加一个新的产品类,不需要修改原来的工厂类就可以正常运行。很明显,简单工厂模式是不满足的,若想保证整个的正常运行必须修改工厂类。
工厂方法模式
工厂方法模式的组成
抽象工厂角色
具体工厂角色
抽象产品角色
具体产品角色
工厂方法模式图示
举例说明
案例说明
代码
- package工厂方法;
- public interface Factory {球员factory();
- }
- package工厂方法;
- public class篮球Factory implements Factory {@Override public球员factory() {
- return new篮球球员 ();
- }
- }
- package工厂方法;
- public class足球Factory implements Factory {@Override public球员factory() {
- return new足球球员 ();
- }
- }
- package工厂方法;
- public interface球员 {
- void跑 ();
- void跳 ();
- }
- package工厂方法;
- public class篮球球员implements球员 {@Override public void跑 () {
- System.out.println("篮球球员,跑跑跑!");
- }@Override public void跳 () {
- System.out.println("篮球球员,跳跳跳!");
- }
- }
- package工厂方法;
- public class足球球员implements球员 {@Override public void跑 () {
- System.out.println("足球球员,跑跑跑!");
- }@Override public void跳 () {
- System.out.println("足球球员,跳跳跳!");
- }
- }
说明:很明显,这里与简单工厂模式的不同在于这里添加了一个工厂接口。而且对于该接口有相应几个,每个对应不同产品类的具体工厂类。
好处:假如现在添加乒乓球球员,在工厂方法模式下,只需要添加两个类即可。一个是乒乓球球员类,另一个是乒乓球 Factory 类【具体代码如下】。而在简单工厂模式下,就需要修改原来的工厂类了,这就不能满足 OCP 原则了。
代码
- package工厂方法;
- public class乒乓球球员implements球员 {@Override public void跑 () {
- System.out.println("乒乓球球员,跑跑跑!");
- }@Override public void跳 () {
- System.out.println("乒乓球球员,跳跳跳!");
- }
- }
- package工厂方法;
- public class乒乓球Factory implements Factory {@Override public球员factory() {
- return new乒乓球球员 ();
- }
- }
总结(简单工厂模式与工厂方法模式比较)
客户端编程难度
维护角度
综述:虽然工厂方法模式更 "先进一些",但总的来说简单工厂模式更好用、更方便些。当然,这只是个人见解。
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: