美文网首页
设计模式(6)-抽象工厂模式

设计模式(6)-抽象工厂模式

作者: zhglance | 来源:发表于2019-06-21 11:32 被阅读0次

抽象工厂模式(Abstract Factory Pattern)是相当于一个超级工厂,用来创建其他工厂。

一、需求举例:

项目中需求开发应用场景:
1.工程师工厂负责生成初级工程师,中级工程师和高级工程师,分别负责完成简单项目,中等难度项目和高难度项目开发;
2.产品经理工厂负责生成初级产品经理,中级产品经理和高级产品经理,分别负责完成简单项目规划,中等难度项目规划和高难度项目规划;
3.初级工程师完成初级产品经理的项目规划,中级工程师完成中级产品经理的项目规划,高级工程师完成高级产品经理的项目规划。

二、类图:

三、代码实例:

1.工程师类

1.1 工程师接口:Engineer

package com.lance.abstractfactory.engineer;

public interface Engineer {


    void develop(String program);
}

1.2.初级工程师类:JuniorEngineer

package com.lance.abstractfactory.engineer;

public class JuniorEngineer implements Engineer {

    @Override
    public void develop(String program) {
        System.out.println("Junior Engineer develop " + program);

    }

}

1.3.中级工程师类:

package com.lance.abstractfactory.engineer;

public class IntermediateEngineer implements Engineer {

    @Override
    public void develop(String program) {
        System.out.println("Intermediate Engineer develop " + program);
    }
}

1.4.高级工程师类:SeniorEngineer

package com.lance.abstractfactory.engineer;

import com.lance.abstractfactory.engineer.Engineer;

public class SeniorEngineer implements Engineer {

    @Override
    public void develop(String program) {
        System.out.println("Senior Engineer develop " + program);

    }
}

2.产品经理类

2.1 产品经理接口:ProductManager

package com.lance.abstractfactory.productmanager;

public interface ProductManager {

    void plan(String program);
}

2.2 初级产品经理:JuniorProductManager

package com.lance.abstractfactory.productmanager;

public class JuniorProductManager implements ProductManager{

    @Override
    public void plan(String program) {

        System.out.println("Junior Product Manager plan " + program);
    }
}

2.3 中级产品经理:IntermediateProductManager

package com.lance.abstractfactory.productmanager;


public class IntermediateProductManager implements ProductManager{

    @Override
    public void plan(String program) {

        System.out.println("Intermediate Product Manager plan " + program);
    }
}

2.4 高级产品经理: SeniorProductManager

package com.lance.abstractfactory.productmanager;


public class SeniorProductManager implements ProductManager{

    @Override
    public void plan(String program) {

        System.out.println("Senior Product Manager plan " + program);
    }
}

3.工厂类

3.1 抽象工厂接口:AbstractFactory

package com.lance.abstractfactory.factory;

import com.lance.abstractfactory.productmanager.ProductManager;
import com.lance.abstractfactory.engineer.Engineer;

public abstract class AbstractFactory {

    public abstract Engineer getEngineer();

    public abstract ProductManager getProductManager();

}

3.2 初级工厂:JuniorFactory

package com.lance.abstractfactory.factory;

import com.lance.abstractfactory.engineer.Engineer;
import com.lance.abstractfactory.engineer.JuniorEngineer;
import com.lance.abstractfactory.productmanager.JuniorProductManager;
import com.lance.abstractfactory.productmanager.ProductManager;

public class JuniorFactory extends AbstractFactory{
    @Override
    public Engineer getEngineer() {
        return new JuniorEngineer();
    }

    @Override
    public ProductManager getProductManager() {
        return new JuniorProductManager();
    }
}

3.3 中级工厂:IntermediateFactory

package com.lance.abstractfactory.factory;

import com.lance.abstractfactory.engineer.Engineer;
import com.lance.abstractfactory.engineer.IntermediateEngineer;
import com.lance.abstractfactory.productmanager.IntermediateProductManager;
import com.lance.abstractfactory.productmanager.ProductManager;

public class IntermediateFactory extends AbstractFactory {
    @Override
    public Engineer getEngineer() {
        return new IntermediateEngineer();
    }

    @Override
    public ProductManager getProductManager() {
        return new IntermediateProductManager();
    }
}

3.4 高级工厂:SeniorFactory

package com.lance.abstractfactory.factory;

import com.lance.abstractfactory.engineer.Engineer;
import com.lance.abstractfactory.engineer.SeniorEngineer;
import com.lance.abstractfactory.productmanager.ProductManager;
import com.lance.abstractfactory.productmanager.SeniorProductManager;

public class SeniorFactory extends AbstractFactory {
    @Override
    public Engineer getEngineer() {
        return new SeniorEngineer();
    }

    @Override
    public ProductManager getProductManager() {
        return new SeniorProductManager();
    }
}

4.主类:AbstractFactoryPattern

package com.lance.abstractfactory;

import com.lance.abstractfactory.engineer.Engineer;
import com.lance.abstractfactory.factory.AbstractFactory;
import com.lance.abstractfactory.factory.IntermediateFactory;
import com.lance.abstractfactory.factory.JuniorFactory;
import com.lance.abstractfactory.factory.SeniorFactory;
import com.lance.abstractfactory.productmanager.ProductManager;

public class AbstractFactoryPattern {

    public static void main(String[] args) {


        System.out.println("==========start==========");
        String program = "easy program";
        AbstractFactory factory = new JuniorFactory();
        ProductManager productManager = factory.getProductManager();
        productManager.plan(program);
        Engineer engineer = factory.getEngineer();
        engineer.develop(program);

        System.out.println("=======================");
        program = "middle program";
        factory = new IntermediateFactory();
        productManager = factory.getProductManager();
        productManager.plan(program);
        engineer = factory.getEngineer();
        engineer.develop(program);

        System.out.println("=======================");
        program = "difficult program";
        factory = new SeniorFactory();
        productManager = factory.getProductManager();
        productManager.plan(program);
        engineer = factory.getEngineer();
        engineer.develop(program);

        System.out.println("==========end==========");

    }
}

输出结果:

==========start==========
Junior Product Manager plan easy program
Junior Engineer develop easy program
=======================
Intermediate Product Manager plan middle program
Intermediate Engineer develop middle program
=======================
Senior Product Manager plan difficult program
Senior Engineer develop difficult program
==========end==========

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • 工厂模式

    设计模式——工厂模式从ES6重新认识JavaScript设计模式 工厂模式主要是为了创建对象实例或者类簇(抽象工厂...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 创建型设计模式

    一 . 工厂模式 二. 抽象工厂设计模式

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

网友评论

      本文标题:设计模式(6)-抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/iltyqctx.html