Java设计模式-工厂方法模式

    我是一个从用了四年的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;
    }
}

 

总结:工厂方法模式:定义了创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值