Java设计模式——工厂方法设计模式
2018-02-05 15:58
204 查看
概述
之前简单介绍了简单工厂设计模式,需要的童靴可以点击这里查看详情。本文主要介绍的是工厂方法设计模式。那么,工厂方法设计模式跟简单工厂设计模式有什么不同的呢。先看一下UML图
简单工厂的区别
简单工厂中,工厂类就一个具体的实现类,它封装了所有的必要逻辑。使用中,可以根据客户端选择的条件动态地实例化相关类。而在工厂方法设计模式中,创建了一个基类的抽象工厂,然后又创建了子类的工厂,这样可以让子类去决定实例化哪个工厂类。使得工厂类的实例化被延迟到了子类。这样就可以把简单工厂中的的具体的内部逻辑判断移送到了客户端,如果以后要加功能的话就不必兴师动众修改工厂类了,修改客户端就好了。这样子更符合开闭原则,工厂类和产品类的耦合性更小一些,修改的时候破坏性更小。代码举例
跟简单工厂类一样,还是以鸟类进行举例,说明工厂方法类的基本实现。
/** * Bird 接口(鸟类的基类 角色:Product) */ public interface Bird { public void fly(); public void run(); }
下面是具体的产品角色类
/** * 鸵鸟(不会飞,跑得快) * 角色:ConcreteProduct */ public class Ostrich implements Bird { @Override public void fly() { System.out.print("不会飞"); } @Override public void run() { System.out.print("跑得快"); } }
/** * 鹦鹉(会飞,跑得慢) * 角色:ConcreteProduct */ public class Parrot implements Bird { @Override public void fly() { System.out.print("会飞"); } @Override public void run() { System.out.print("跑得慢"); } }
上面是产品类,跟简单工厂类是一样的,不需要多说。下面说一下工厂类
/** * 角色:工厂基类 */ public interface BaseBirdFactory { Bird getBird(); }
/** * 鸵鸟工厂 * 具体的工厂子类 */ public class OstrichFactory implements BaseBirdFactory{ private static OstrichFactory ostrichFactory; private OstrichFactory(){ } public static OstrichFactory getInstance(){ if(ostrichFactory==null){ ostrichFactory = new OstrichFactory(); } return ostrichFactory; } @Override public Bird getBird() { return new Ostrich(); } }
/** * 鹦鹉工厂 * 具体的工厂子类 */ public class ParrotFactory implements BaseBirdFactory { private static simplefactory.ParrotFactory parrotFactory; private ParrotFactory() { } public static simplefactory.ParrotFactory getInstance() { if (parrotFactory == null) { parrotFactory = new ParrotFactory(); } return parrotFactory; } @Override public Bird getBird() { return new Parrot(); } }
客户端使用
public class Main { public static void main(String[] args){ Bird ostrich = OstrichFactory.getInstance().getBird(); ostrich.fly(); ostrich.run(); Bird parrot = ParrotFactory.getInstance().getBird(); parrot.fly(); parrot.run(); } }
相关文章推荐
- JAVA设计模式——工厂方法(Factory Method)模式
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- java 设计模式-创建模式之工厂方法模式1
- Java实践之路(设计模式)——工厂模式(工厂方法)
- Java设计模式之工厂方法模式
- java设计模式之工厂方法
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- java设计模式之工厂方法模式以及简单工厂模式还有抽象工厂模式
- JAVA设计模式学习之----创建模式:工厂模式(工厂方法)
- java 设计模式-创建模式之工厂方法模式2
- Java设计模式(2) -- 工厂方法
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 设计模式(一)----- 工厂方法(FactoryMethod)----(JAVA版)
- Java设计模式之工厂方法模式
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- JAVA设计模式——工厂方法
- java设计模式--工厂方法设计模式
- java_23种设计模式之工厂方法模式
- 3.23种设计模式的Java版--Factory Method(工厂方法)