工厂方法设计模式-java

​ 概念:定义一个用于创建对象的接口,让子类来决定实例化哪个产品类对象,工厂方法使得了实例化延迟到了其工厂的子类

​ 工厂方法主要角色:

抽象工厂(Abstract Factory):提供创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。

具体工厂(Concrete Factory):主要实现了抽象工厂的抽象方法,完成具体产品的创建

抽象产品(Product):定义了产品的规范,描述产品的主要特性和功能

具体产品(Concrete Product):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂一 一对应

在这里插入图片描述

抽象工厂角色

​ CoffeeFactory.java 咖啡

// 抽象工厂:  咖啡工厂
public interface CoffeeFactory {

    // 创建咖啡的方法
    Coffee createCoffee();
}
具体工厂角色

​ AmericanCoffeeFactory.java 生产美式咖啡的工厂

// 具体工厂:美式咖啡工厂 专门生产美式咖啡
public class AmericanCoffeeFactory implements CoffeeFactory {

    //实现创建咖啡方法,返回美式咖啡具体产品
    @Override
    public Coffee createCoffee() {
        return new AmericanCoffee();
    }
}

​ LatteCoffeeFactory.java 生产拿铁咖啡的工厂

// 具体工厂:拿铁咖啡工厂 专门生产拿铁咖啡
public class LatteCoffeeFactory implements CoffeeFactory {

    // 实现创建咖啡方法,返回拿铁咖啡
    @Override
    public Coffee createCoffee() {
        return new LatteCoffee();
    }
}
抽象产品角色

​ Coffee.java

// 抽象产品: 咖啡
public abstract class Coffee {

    public abstract String getName();

    //加糖
    public void addSugar(){
        System.out.println("加糖");
    }

    // 加奶
    public void addMilk(){
        System.out.println("加奶");
    }

}
具体产品角色

​ AmericanCoffee.java 美式咖啡具体产品

// 美式咖啡
public class AmericanCoffee extends Coffee{

    @Override
    public String getName() {
        return "美式咖啡";
    }
}

​ LatteCoffee.java 拿铁咖啡具体产品

// 拿铁咖啡
public class LatteCoffee extends Coffee {
    @Override
    public String getName() {
        return "拿铁咖啡";
    }
}
咖啡店类

​ 用户来咖啡店购买产品,咖啡店实例化具体工厂,再由具体工厂来生产对应的咖啡种类

​ CoffeeStore.java

// 咖啡店类
public class CoffeeStore {

    //声明一个私有的工厂属性
    private CoffeeFactory factory;

    //设置咖啡店的生产工厂
    public void setFactory(CoffeeFactory coffeeFactory) {
        this.factory = coffeeFactory;
    }

    // 点咖啡的功能
    public Coffee orderCoffee() {
        //调用点咖啡的方法,会返回一个对应工厂的咖啡
        Coffee coffee = factory.createCoffee();
        // 加配料开始生产咖啡
        coffee.addMilk();
        coffee.addSugar();
        //咖啡生产完成,把对象返回
        return coffee;
    }

}
测试使用

​ TestFactoryMethod.java 测试工厂方法模式,模拟了两个用户过来买不同的产品

public class TestFactoryMethod {
    public static void main(String[] args) {
        // 客户过来买了一杯美式咖啡
        System.out.println("小明买美式咖啡");
        // 创建咖啡店
        CoffeeStore coffeeStore = new CoffeeStore();
        //设置咖啡工厂
        coffeeStore.setFactory(new AmericanCoffeeFactory());
        //订购咖啡
        Coffee coffee = coffeeStore.orderCoffee();
        //将咖啡给小明
        System.out.println(coffee.getName());
        //又有新客户过来点了杯拿铁咖啡
        System.out.println("小美过来买拿铁咖啡");
        //设置咖啡的工厂
        coffeeStore.setFactory(new LatteCoffeeFactory());
        //订购咖啡
        Coffee coffee2 = coffeeStore.orderCoffee();
        //将咖啡给小明
        System.out.println(coffee2.getName());

    }
}

在这里插入图片描述

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值