观察以下代码:
分析:主方法应该就表示一个客户端,主方法的代码越少越好。此时直接在主方法中指定了要操作的子类,如果要更换子类,肯定要修改客户端,就表示客户端根特定的子类紧密耦合在一起了。
结论:用户吃什么水果,应该直接说,然后由程序产生对应的水果。而不是用户直接去实例化苹果对象。
这个过渡端就是将用户的请求进行处理的程序,用户请求不同,得到的水果对象也不同,返回给用户调用。
这个过渡端在程序中就称为工厂设计。你需要吃什么水果,就告诉工厂,工厂就给你造什么水果对象,不用你自己造(实例化)。
定义工厂类
上例中如果传入的值为空值,那么工厂类还能使用吗?
空值不能调用方法
一个字符串的常量就是一个String类的匿名对象,它永远不可能为空值。所以修改代码为:
这样每次变化都不用修改客户端。