(二)JAVA实现工厂方法模式

一、工厂方法模式说明

简单工厂模式是一个工厂生产多种产品,该模式不符合设计原则中的开闭原则。

而工厂方法则是简单工厂的进一步变形,参照上一篇《(一)简单工厂模式》中的场景说明图:

1、消费者向工厂采购产品(水果)

2、工厂指定生成线(方法)生成产品

3、工厂将产品提供给消费者。

模式要素:

1、产品接口类、产品接口实现类。

2、工厂提供具体产品生产方法。

3、具体产品生产方法返回产品接口类。

二、代码示例

1、产品(水果)接口类:

package com.mycompany.app;

/**
 * 水果接口类
 */
public interface Fruit {

    /**
     * 获取水果名称
     * @return 名称
     */
    String getName();
}

2、产品(苹果)实现类:

package com.mycompany.app;

public class Apple implements Fruit {
    public String getName() {
        return "苹果";
    }
}

3、产品(香蕉)实现类:

package com.mycompany.app;

public class Banana implements Fruit {
    public String getName() {
        return "香蕉";
    }
}

4、产品(橘子)实现类

package com.mycompany.app;

public class Orange implements Fruit {
    public String getName() {
        return "橘子";
    }
}

5、工厂接口类:

package com.mycompany.app;


public class FunctionFactoryTest {


    public static void main(String[] args) {

        //提供工厂实例
        FunctionFactory factory = new AppleFactory();

        Fruit apple = factory.getFruit();

        System.out.println("购买苹果:" + apple.getName());

        factory = new BananaFactory();
        Fruit banana = factory.getFruit();

        System.out.println("购买香蕉:" + banana.getName());

        factory = new OrangeFactory();
        Fruit orange = factory.getFruit();

        System.out.println("购买香蕉:" + orange.getName());
    }

}

6、苹果工厂类:

package com.mycompany.app;

public class AppleFactory implements  FunctionFactory{
    public Fruit getFruit() {
        return new Apple();
    }
}

7、香蕉工厂类:

package com.mycompany.app;

public class BananaFactory implements FunctionFactory {
    public Fruit getFruit() {
        return new Banana();
    }
}

8、橘子工厂类:

package com.mycompany.app;

public class OrangeFactory implements FunctionFactory {
    public Fruit getFruit() {
        return new Orange();
    }
}

9、测试类:

package com.mycompany.app;


public class FunctionFactoryTest {


    public static void main(String[] args) {

        //提供工厂实例
        FunctionFactory factory = new AppleFactory();

        Fruit apple = factory.getFruit();

        System.out.println("购买苹果:" + apple.getName());

        factory = new BananaFactory();
        Fruit banana = factory.getFruit();

        System.out.println("购买香蕉:" + banana.getName());

        factory = new OrangeFactory();
        Fruit orange = factory.getFruit();

        System.out.println("购买香蕉:" + orange.getName());
    }

}

10、测试结果:

购买苹果:苹果
购买香蕉:香蕉
购买香蕉:橘子

Process finished with exit code 0
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值