今天有幸拜读了以下大鸟的《大话设计模式》,刷新了我的编程三观,发现如果写代码只为了实现功能,那也太low了,编程就是一门艺术。
工厂模式是一个最简单的模式,它的主要功能是根据需要创建合适的对象。
例如:有一天我口渴了想吃水果,到了水果店,跟里面的店员说:”我想吃苹果。“ 店员就拿出来一个苹果给我。这个水果店就像一个工厂,我想要什么,店员就拿给我什么。
工厂模式的UML类图如下,以上面的吃水果的例子为例:
Fruit是一个抽象类,有一个属性name,还有一个公有方法eat。下面的Apple、Orange、Peach类继承Fruit类。FruitStore类是一个工厂,与Fruit类是关联关系(水果店需要知道水果的存在),在这个类中,还有一个getFruit方法,返回一个Fruit对象。
工厂模式可以把面向对象的三大特性:封装、继承、多态 体现地淋淋尽致了。把水果的共性(有名称,可以吃)抽象出来进行封装 做成父类,具体水果继承 父类具体实现,最后水果店类返回给用户一个水果对象,当用户吃水果的时候,就可以具体地吃到某一种水果了,这就是多态。
该模式用Java语言实现如下(还是上面水果店的例子):
import java.util.*;
abstract class Fruit
{
public String name;
public abstract void eat();
}
class Apple extends Fruit
{
public Apple()
{
this.name = "苹果";
}
public void eat()
{
System.out.println("吃苹果...");
}
}
class Orange extends Fruit
{
public Orange()
{
this.name = "橘子";
}
public void eat()
{
System.out.println("吃橘子...");
}
}
class Peach extends Fruit
{
public Peach()
{
this.name = "桃子";
}
public void eat()
{
System.out.println("吃桃子...");
}
}
class FruitStore
{
public static Fruit getFruit(String type)
{
switch(type)
{
case "Apple": return new Apple();
case "Orange": return new Orange();
case "Peach": return new Peach();
default: return null;
}
}
}
public class Main
{
public static void main(String args[])
{
Fruit f = FruitStore.getFruit("Apple");
f.eat();
}
}
运行结果如下: