设计模式之工厂(一)

本文章主要是对Java23种设计模式种的工厂模式进行总结。工厂,顾名思义,就是创建批量化操作的大的工厂。而今天我们也可以利用现实生活中的工厂思维,来理解设计模式的工厂模式。

设计模式之工厂模式共有三种形态:

简单的工厂模式(静态工厂模式),工厂方法模式(多态性工厂或者虚拟构造子模式)、抽象工厂模式(工具箱模式)

简单的工厂模式

所谓的简单工厂模式,所涉及到的有工厂角色、抽象产品角色以及具体产品角色等三个角色

工厂类:担任角色的是工厂方法模式的核心,含有与应用紧密相关的具体业务逻辑。工厂类在客户端的直接调用下创建产品对象,它往往是由一个具体的Java类来实现的

抽象产品:是工厂方法模式所创建的对象的父类,或者是他们共同拥有的接口,抽象产品角色可以用一个Java接口或者抽象类来实现

具体产品:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色也是由一个Java类实现的。

下面是一个简单的小栗子,首先工厂是厨房,抽象类是笼统的菜,实现类就是具体哪个菜。

抽象产品

/**
 * 抽象类角色:food接口,约束类型
 */
public interface IFood {
    /**
     * 提供一个展示食物细节的方法
     * @param foodName 食物名称
     */
    public void showFood();
}

具体产品-鱼、土豆丝

/**
 * 具体食物:土豆丝
 */
public class ShreddedPotatoesFood implements IFood{
    @Override
    public void showFood() {
        System.out.println("一盘土豆丝");
    }
}


/**
 * 具体产品-食物鱼
 */
public class FishFood implements IFood
{
    @Override
    public void showFood() {
        System.out.println("一盘鱼");
    }
}

工厂角色

/**
 * 工厂角色-食物工厂
 */
public class SimpleFoodFactory {
    /**
     * 提供一个静态方法,用于获取食物
     * @param foodType 食物类型
     * @return 具体食物
     */
    public static IFood getFood(String foodType){
        IFood food = null;
        if (foodType.equals("fish")) {
            food = new FishFood();
        }
        if (foodType.equals("potatoes")) {
            food = new ShreddedPotatoesFood();
        }
        return food;
    }
}

客户端

/**
 * 客户端
 */
public class MainTest {
    public static void main(String[] args) {
        IFood fishfood = SimpleFoodFactory.getFood("fish");
        fishfood.showFood();
        IFood potatoesfood = SimpleFoodFactory.getFood("potatoes");
        potatoesfood.showFood();
    }
}

通过分析整个简单工厂模式,我们不难发现:

该模式的核心在于工厂角色,也就是SimpleFoddFacotry类,这个类包含了必要的判断逻辑,可以决定什么时候需要创建什么对象。而此时的客户端的操作就只有工厂类的身影。所以,用一句话来概括这一优势,就是简单工厂模式实现了对责任的分割。

但同时该方法也存在一定的缺陷,对于担任工厂角色的工厂类的就显得尤为吃力,无论是在维护后期的扩展还是维护。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章