面向对象设计模式之---简易工厂模式(Simple Factory Pattern)

今天有幸拜读了以下大鸟的《大话设计模式》,刷新了我的编程三观,发现如果写代码只为了实现功能,那也太low了,编程就是一门艺术。

工厂模式是一个最简单的模式,它的主要功能是根据需要创建合适的对象

例如:有一天我口渴了想吃水果,到了水果店,跟里面的店员说:”我想吃苹果。“ 店员就拿出来一个苹果给我。这个水果店就像一个工厂,我想要什么,店员就拿给我什么。

工厂模式的UML类图如下,以上面的吃水果的例子为例:

面向对象设计模式之---简易工厂模式(Simple Factory Pattern)_第1张图片

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();
  }
}

运行结果如下:
面向对象设计模式之---简易工厂模式(Simple Factory Pattern)_第2张图片

你可能感兴趣的:(设计模式)