gpt4 book ai didi

java - 我正在尝试使用 Java 8 在下面的代码片段中实现策略设计模式。寻找更好的实现方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:12 24 4
gpt4 key购买 nike

我有以下服务实现:-

package Java8.controller;

import java.util.function.Function;

public class ServiceImpl implements ITicket {

Function<Integer,Double> ticketCal;

public ServiceImpl(Function<Integer,Double> ticketCal){
this.ticketCal= ticketCal;
}

@Override
public double calculateFare(int quantity) {
return ticketCal.apply(quantity);
}

}

以下是我创建的策略:-

躺椅票攻略:-

package Java8.controller;

import java.util.function.Function;

public interface ReclinerTicketStrategy {

default Function<Integer,Double> reclinerTicketStrategy(){

return (noOfTickets)->{
return noOfTickets * 200.00;
};
}
}

VIP票攻略:-

package Java8.controller;

import java.util.function.Function;

public interface VipTicketStrategy {

default Function<Integer,Double> vipTicketStrategy(){

return (noOfTickets)->{
return noOfTickets*400.00;
};

}
}

下面是使用该策略的主类:-

package Java8.controller;

public class Main implements ReclinerTicketStrategy {

public Main(){

ITicket ticketsVip = new ServiceImpl(reclinerTicketStrategy());
System.out.println(ticketsVip.calculateFare(5));

}

public static void main(String args[]){
Main main = new Main();
}


}


我的问题是,这是否是将策略函数作为默认方法放置在界面中的正确方法?或者有更好的方法吗?

最佳答案

策略应该实现服务所需的抽象。在这种情况下,服务需要 Function<Integer,Double>那么一个策略就是……

class ReclinerTicketStrategy implements Function<Integer,Double> {
@Override
public Double apply(Integer noOfTickets) {
return noOfTickets * 200.0;
}
}

然后服务被实例化为,
ITicket reclinerTicket = new ServiceImpl(new ReclinerTicketStrategy());

当然,如果不需要复用策略,那么一个lambda就足够了。
ITicket reclinerTicket = new ServiceImpl(noOfTickets -> noOfTickets * 200.0);

关于java - 我正在尝试使用 Java 8 在下面的代码片段中实现策略设计模式。寻找更好的实现方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58154334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com