Java常用的设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory)

1、基本构成
有四个角色:多个抽象产品类,多个具体产品实现类,一个抽象工厂类,多个具体工厂实现类。

2、特点
与工厂方法模式不同的是,工厂方法模式中的工厂只生产单一的产品,而抽象工厂模式中的工厂生产多个产品。

3、工厂方法模式和抽象工厂模式的区别
(1)工厂方法模式:
1.一个抽象产品类,可以派生出多个具体产品类。
2.一个抽象工厂类,可以派生出多个具体工厂类。
3.每个具体工厂类只能创建一个具体产品类的实例。

(2)抽象工厂模式:
1.多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
2.一个抽象工厂类,可以派生出多个具体工厂类。
3.每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。

主要区别:
1.工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
2.工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

抽象工厂模式实例代码如下:

第一步:创建抽象产品类,可以创建多个
交通工具类:

package abstractFactory;

/**
 * 抽象产品类:交通抽象类
 */

public interface Vehicle {
    public void take();
}

食物类:

package abstractFactory;

/**
 * 抽象产品类:食物抽象类
 */

public interface Food {
    public void cook();
}

第二步:创建具体产品类,可以创建多个

package abstractFactory;

/**
 * 具体产品类:交通飞机类
 */

public class Plane implements Vehicle {

    @Override
    public void take() {
        System.out.println("飞机安全舒适!");
    }

}
package abstractFactory;

/**
 * 具体产品类:交通火车类
 */

public class Train implements Vehicle {

    @Override
    public void take() {
        System.out.println("火车方便快捷!");
    }

}
package abstractFactory;

/**
 * 具体产品类:食物荤菜类
 */

public class Meat implements Food {

    @Override
    public void cook() {
        System.out.println("荤菜精力充沛!");
    }

}
package abstractFactory;

/**
 * 具体产品类:食物素菜类
 */

public class Vegetable implements Food {

    @Override
    public void cook() {
        System.out.println("素菜绿色健康!");
    }

}

第三步:创建抽象工厂类

package abstractFactory;

/**
 * 抽象工厂类
 */

public interface AbstactManager {
    public Food cookFood();
    public Vehicle takeVehicle();
}

第四步:创建具体工厂类,可以创建多个

package abstractFactory;

/**
 * 具体工厂类1,其中Food,Vehicle是抽象类
 */

public class ConcreteManager1 implements AbstactManager {

    @Override
    public Food cookFood() {
        return new Vegetable();
    }

    @Override
    public Vehicle takeVehicle() {
        return new Plane();
    }

}
package abstractFactory;

/**
 * 具体工厂类2,其中Food,Vehicle是抽象类
 */

public class ConcreteManager2 implements AbstactManager {

    @Override
    public Food cookFood() {
        return new Meat();
    }

    @Override
    public Vehicle takeVehicle() {
        return new Train();
    }

}

第五步:创建测试类

package abstractFactory;

/**
 * 测试类
 */

/*public class Test {
    public static void main(String[] args) {

        //测试第一个具体工厂类
        AbstactManager am1 = new ConcreteManager1();
        //测试食物
        Food food1 = am1.cookFood();
        food1.cook();
        //测试交通
        Vehicle vehicle1 = am1.takeVehicle();
        vehicle1.take();

        //测试第二个具体工厂类
        AbstactManager am2 = new ConcreteManager2();
        //测试食物
        Food food2 = am2.cookFood();
        food2.cook();
        //测试交通
        Vehicle vehicle2 = am2.takeVehicle();
        vehicle2.take();

    }
}*/

结果显示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jsc123581/article/details/81749641