目录标题
定义函数式接口
- ISellIPad.java
java
/**
* 定义一个函数式接口
* @param <T>
*/
@FunctionalInterface
public interface ISellIPad<T> {
T getSellIPadInfo();
}
函数式接口实现类
- HuaWeiSellIPad.java
java
public class HuaWeiSellIPad implements ISellIPad<String>{
@Override
public String getSellIPadInfo() {
System.out.println("华为IPad:getSellIPadInfo");
return "华为IPad";
}
}
- HuaWeiSellIPad.java
java
public class XiaomiSellIPad implements ISellIPad<String>{
@Override
public String getSellIPadInfo() {
System.out.println("小米IPad:getSellIPadInfo");
return "小米IPad";
}
}
工厂类封装
- SellIPadFactory.java
java
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
/**
* 创建一个工厂类
*/
public class SellIPadFactory {
final static Map<String, Supplier<ISellIPad>> map = new HashMap<>();
static {
map.put("xiaomi", XiaomiSellIPad::new);
map.put("huawei", HuaWeiSellIPad::new);
}
public static ISellIPad getInstance(String ipadName) {
Supplier<ISellIPad> iPadSupplier = map.get(ipadName);
if(iPadSupplier != null) {
return iPadSupplier.get();
}
throw new IllegalArgumentException("No Such ISellIPad " + ipadName);
}
}
实际应用
- PinDuoDuoShopV3.java
java
public class PinDuoDuoShopV3 {
public void order(String pcName){
//函数式编程的好处:减少可变量的声明,能够更好的利用并行,代码更加简洁可读。
ISellIPad<String> sellIPad = SellIPadFactory.getInstance(pcName);
String getIpad = sellIPad.getSellIPadInfo();
System.out.println("PinDuoDuoShopV3=>order=>执行完毕=>"+getIpad);
}
}
总结
- 定义函数式接口(ISellIPad.java):这个接口被 ISellIPad 类型的对象实现,该接口定义了一个 getSellIPadInfo() 方法,用于获取销售 iPad 的信息。
- 函数式接口实现类:(HuaWeiSellIPad.java 和 XiaomiSellIPad.java):这些类分别实现了 ISellIPad 接口,提供了针对不同品牌 iPad 的销售信息。
- 工厂类封装(SellIPadFactory.java):这个类创建了一个 iPad 工厂,通过传入 iPad 的名称来获取相应的 ISellIPad 实例。它使用了 Java 8 中的 Supplier 函数式接口来提供实例化对象的方法。
- 实际应用(PinDuoDuoShopV3.java):这个类展示了如何使用工厂类来订购 iPad。通过调用 SellIPadFactory.getInstance(pcName) 来获取相应品牌的 iPad 实例,然后执行 getSellIPadInfo() 方法来获取销售信息。