2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > [设计模式-创建型]工厂方法(Factory Method)

[设计模式-创建型]工厂方法(Factory Method)

时间:2020-04-10 15:21:10

相关推荐

[设计模式-创建型]工厂方法(Factory Method)

概括

解析

工厂方法模式在网络上有一个形象的比喻:

FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

1.Product

定义工厂方法所创建的对象的接口。

2.ConcreteProduct

实现Product接口。

3.Creator

声明工厂方法,该方法返回一个Product类型的对象*

Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。

可以调用工厂方法以创建一个Product对象。

4.ConcreteCreator

重定义工厂方法以返回一个ConcreteProduct实例。

实例

可能看到这里还是不是很清楚。直接看例子好了。涉及的文件有

Product.java

- SoftwareProduct.java

- HardwareProduct.java

Creator.java

- HardwareCreator.java

- SoftwareCreator.java

TestMain.java

在Product 里定义了一个接口方法 doWork(), SoftwareProduct和HardwareProduct分别实现了这个方法。

Creator里定义了一个接口方法getProduct(),SoftwareCreator和HardwareCreator分别实现了这个方法得到不同的 Product.

/** * @author oscar999 * @date -7-17* @version V1.0 */package designptn.factorymth;public interface Product {void doWork();}

/** * @author oscar999 * @date -7-17* @version V1.0 */package designptn.factorymth;public class SoftwareProduct implements Product {public void doWork() {System.out.println("product a Software.");}}

/** * @author oscar999 * @date -7-17* @version V1.0 */package designptn.factorymth;public class HardwareProduct implements Product {public void doWork() {System.out.println("product a Hardware.");}}

/** * @author oscar999 * @date -7-17* @version V1.0 */package designptn.factorymth;public class SoftwareCreator implements Creator {public Product getProduct() {return new SoftwareProduct();}}

/** * @author oscar999 * @date -7-17* @version V1.0 */package designptn.factorymth;public class HardwareCreator implements Creator {public Product getProduct() {return new HardwareProduct();}}

/** * @author oscar999 * @date -7-17* @version V1.0 */package designptn.factorymth;public class TestMain {public static void main(String[] args) {Creator softwareCreator = new SoftwareCreator();Product softwareProduct = softwareCreator.getProduct();softwareProduct.doWork();Creator hardwareCreator = new HardwareCreator();Product hardwareProduct = hardwareCreator.getProduct();hardwareProduct.doWork();}}

从Main 函数的调用来看, 通过不同的Creator,可以得到不同的Product, 而不需要关心具体的Product 是什么样的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。