1,简单工厂模式
a) 有一个抽象的接口用来表示工厂需要生产的产品共性;然后各个具体的产品类实现该抽象接口。
b) 工厂只需要持有产品的抽象接口,工厂接收一个 TYPE 参数来决定生产何种产品。
c) 对于客户而言,当他需要某种类型的产品时,只需要获得工厂对象,然后将产品的 TYPE参数传递给工厂,由工厂创建他所需要的产品。
2,策略模式
策略,本质上是一种算法。当客户需要处理某件事情时,由于所处的环境不同,他可以采取不同的方式(策略)去处理。因此,客户关注的是如何方便得获取所需的策略。
a) 有一个抽象的接口用来表示策略的框架,它定义了基本的处理算法。然后各个具体的策略实现该接口来扩充、实现相应的具体策略。
b) 有一个Context类来表示环境,Context拥有抽象的策略接口,它根据 TYPE参数来决定使用哪个策略。
c) 对于客户而言,当他需要使用某种策略时,肯定所处在某个Context上下文环境中,他传递一个TYPE参数给Context,由Context来负责使用何种策略。
3,简单工厂模式与策略模式的比较
①策略模式与简单工厂模式的结构图基本一致,因此,二者的使用模式基本一致。
②简单工厂模式的目的是创建对象,并使用所创建的对象去做事情(需要持有对象的引用);策略模式的目的是使用策略,即客户只关注我需要某种策略,你提供一个给我,我拿着该策略完成任务就行了(不需要持有策略的引用)。
③策略模式是定义一系列算法的方法,这些算法以不同的方式完成相同的工作,即算法的实现不同。策略模式让客户以统一的方式来调用不同的算法,将算法的使用者与算法解耦。
④简单工厂模式定义如何获得产品的方法,不同的产品具有不同的功能,简单工厂模式解决了客户如何有效地获取他所关心的产品。对客户而言,只需要持有一个工厂对象,给工厂一个产品的类型参数,让工厂负责生产相应的产品即可。然后,客户就拿着这个产品,进行方法调用,获得相关的产品的功能。