我是一个从用了四年的Eclipse转向用Idea编译器的Coder,但是有人说Idea是非常好的开发工具,那么我就 想尝试一下,这个“好”,好在哪里?
但是第一次使用,我连创建个Java项目都不会,只能创建一个J2EE Project。(哈)
此句话来自于《Head First设计模式》中文版:在设计模式中,所谓的“实现一个接口”,并“不一定”表示“写一个类,并领用implement关键字来实现某个Java接口。“实现一个接口”泛指“实现某个超类型(可以是类或接口)的某个方法”。
接下来写的代码,尽最大努力去遵照《阿里巴巴Java开发手册》的规范进行编码。
工厂方法模式(Factory Method Pattern)通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。
代码仓库:https://github.com/maronghe/mdp/tree/master/src/com/ibm/pattern/factory/method
欢迎吐槽,喜欢的可以点个小星星⭐哦!
测试的主类:
package com.ibm.pattern.factory.method;
import com.ibm.pattern.factory.common.Pizza;
import com.ibm.pattern.factory.common.PizzaStore;
/**
* 披萨的测试类
* Created by MRH on 2018/8/12.
*/
public class PizzaMethodFactoryTest {
public static void main(String[] args) {
//创建纽约工厂
NewYorkPizzaFactory newYorkPizzaFactory = new NewYorkPizzaFactory();
//创建纽约披萨
Pizza newYorkPizza = new PizzaStore(newYorkPizzaFactory).orderPizza("cheese");
//创建芝加哥工厂
ChicagoPizzaFactory chicagoPizzafactory = new ChicagoPizzaFactory();
//创建芝加哥披萨
Pizza chicagoPizza = new PizzaStore(chicagoPizzafactory).orderPizza("cheese");
}
}
工厂的抽象类:
package com.ibm.pattern.factory.method;
import com.ibm.pattern.factory.common.Pizza;
/**
* 工厂的抽象类
* Created by MRH on 2018/8/12.
*/
public abstract class SimplePizzaFactory {
public abstract Pizza createPizza(String type);
}
芝加哥工厂:
package com.ibm.pattern.factory.method;
import com.ibm.pattern.factory.common.Pizza;
/**
* 芝加哥披萨工厂
* Created by MRH on 2018/8/12.
*/
public class ChicagoPizzaFactory extends SimplePizzaFactory {
public Pizza createPizza(String type){
Pizza pizza = null;
if("cheese".equals(type)){
pizza = new ChicagoCheesePizza();
}else if ("greek".equals(type)){
pizza = new ChicagoGreekPizza();
}
return pizza;
}
}
纽约工厂:
package com.ibm.pattern.factory.method;
import com.ibm.pattern.factory.common.CheesePizza;
import com.ibm.pattern.factory.common.Pizza;
import com.ibm.pattern.factory.simple.GreekPizza;
/**
* 纽约披萨工厂
* Created by MRH on 2018/8/12.
*/
public class NewYorkPizzaFactory extends SimplePizzaFactory{
public Pizza createPizza(String type){
Pizza pizza = null;
if("cheese".equals(type)){
pizza = new NewYorkCheesePizza();
}else if ("greek".equals(type)){
pizza = new NewYorkGreekPizza();
}
return pizza;
}
}
总结:工厂方法模式:定义了创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。