一个程序员的思想高度,取决于能否对问题进行分类、整理,抽取出一个统一的解决方案。“一招鲜,吃遍天。”这句话在这里是褒义的。小伙伴们能不能过好35岁的槛儿,这种能力很关键。当客户把一坨像屎一样的需求扔给你的时候,你能够在不用亲自去品尝的前提下,给他方案:这种偏绿色,还带有蔬菜渣儿的中年用户所喜欢的,那种带有水香的是女用户所喜欢的、立体感强的现在已经不是主流方案,现在流行流体式的....当然,这只是玩笑。做到这样,首先得先学会提前思考,这个是最难的。
我说的这些,就是从工厂模式里联想到的。代码写多了,代码中的智慧也在影向自己。正文如下。
工厂模式是一创造型的模式。它是用来解决不同对象完成相同任务时,完成相同效果,但是兼容或者说忽略实现细节的一种方案。比如说我们都写过的命题作文,我可躺着写,趴着写,倒立着写,用英文写...但最后我都写出了命题中的内容了,你管我怎么写的。 比较实际的例子是数据库驱动程序的设计,即使数据库的种类极多,但是数据驱动只是需要修改配置使用哪一种数据库对应的方言就可以使用。这就是工厂模式的强大之处,以不变应万变。
工厂模式模型三要素:集合了公用方法的接口、根据命名而选择对应实现的工厂类、各种不同的实现类。
>工厂接收入参>找到对应实现类>调用
比如,我要建一个水果工厂。水果种类可以很多,但都要做检测(公用的接口)才行,但是对于所有水果都有不同的检测标准(不同的实现方法)。所以,先有一个接口。
public interface Fruit {
public void checkFruit();
}
接下来,多种水果的检测实现。
苹果
public class Apple implements Fruit{
@override
public void checkFruit() {
System.out.printLn("apple is passed");
}
}
梨。
public class Pear implements Fruit{
@override
public void checkFruit() {
System.out.printLn("pear is passed");
}
}
葡萄。
public class Grape implements Fruit{
@override
public void checkFruit() {
System.out.printLn("grape is passed");
}
}
关键一步:一个工厂方法,由入参去查找对应的实现。
public class FruitFactory {
public Fruit getFruit(String fruitName) throws Exception{
if ("apple".toUpperCase().equals(fruitName)) {
return new Apple();
} else if ("pear".toUpperCase().equals(fruitName)) {
return new Pear();
} else if ("grape".toUpperCase().equals(fruitName)) {
return new Grape();
} else {
throw new Exception("not exist fruit type.");
}
}
}
调用。
public class FactoryPatternDemo {
public void static main(String[] args) throws Exception{
FruitFactory.getFruit("apple").checkFruit();
FruitFactory.getFruit("pear").checkFruit();
FruitFactory.getFruit("grape").checkFruit();
}
}
可以看出,工厂模式是让一套代码但可以复用在多个相同的对象身上。如果有新的类添加,只需要实现接口并重写实现就可以。同志们可以多联想类似的场景。