首页 > 其他分享 >抽象工厂模式

抽象工厂模式

时间:2023-11-30 09:23:32浏览次数:39  
标签:package class factory 模式 工厂 抽象 abstractFactory new public

软件设计                  石家庄铁道大学信息学院

 

实验4:抽象工厂模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解抽象工厂模式的动机,掌握该模式的结构;

2、能够利用抽象工厂模式解决实际问题。

 

[实验任务一]:人与肤色

使用抽象工厂模式,完成下述产品等级结构:

 

 

实验要求:

1. 画出对应的类图;

 

 

2. 提交源代码;

BlackFactory

package abstractFactory;

public class BlackFactory extends Factory {
    @Override
    public Man produceMan() {
        return new BlackMan();
    }

    @Override
    public Woman produceWoman() {
        return new BlackWoman();
    }
}

BlackMan

package abstractFactory;

public class BlackMan extends Man{
    @Override
    public void manProduce() {
        System.out.println("生产一个黑色皮肤男人");
    }
}

BlackWoman

package abstractFactory;

public class BlackWoman extends Woman{
    @Override
    public void womanProduce() {
        System.out.println("生产一个黑色皮肤的女人");
    }
}

Client

package abstractFactory;

import java.util.Scanner;

public class Client {

    public static void main(String[] args) {
        System.out.println("请选择生产的人种:1:黄皮肤男人、2:黄皮肤女人、3:黑皮肤男人、4:黑皮肤女人、5:白皮肤男人、6:白皮肤女人");
        Scanner sc = new Scanner(System.in);
        int choice = sc.nextInt();
        Factory factory;
        Man man;
        Woman woman;
        if(choice == 1) {
           factory = new YellowFactory();
           man = factory.produceMan();
           man.manProduce();
        } else if (choice == 2) {
            factory = new YellowFactory();
            woman = factory.produceWoman();
            woman.womanProduce();
        }else if (choice == 3){
            factory = new BlackFactory();
            man = factory.produceMan();
            man.manProduce();
        }else if (choice == 4){
            factory = new BlackFactory();
            woman = factory.produceWoman();
            woman.womanProduce();
        }else if (choice == 5){
            factory = new WhiteFactory();
            man = factory.produceMan();
            man.manProduce();
        }else if(choice == 6){
            factory = new WhiteFactory();
            woman = factory.produceWoman();
            woman.womanProduce();
        }
    }
}

Factory

package abstractFactory;

public abstract class Factory {
    public abstract Man produceMan();
    public abstract Woman produceWoman();
}

Man

package abstractFactory;

public abstract class Man {
    public abstract void manProduce();
}

WhiteFactory

package abstractFactory;

public class WhiteFactory extends Factory{
    @Override
    public Man produceMan() {
        return new WhiteMan();
    }

    @Override
    public Woman produceWoman() {
        return new WhiteWoman();
    }
}

WhiteMan

package abstractFactory;

public class WhiteMan extends Man{
    @Override
    public void manProduce() {
        System.out.println("生产一个白色皮肤男人");
    }
}

WhiteWoman

package abstractFactory;

public class WhiteWoman extends Woman{
    @Override
    public void womanProduce() {
        System.out.println("生产一个白色皮肤的女人");
    }
}

Woman

package abstractFactory;

public abstract class Woman {
    public abstract void womanProduce();
}

YellowFactory

package abstractFactory;

public class YellowFactory extends Factory{
    @Override
    public Man produceMan() {
        return new YellowMan();
    }

    @Override
    public Woman produceWoman() {
        return new YellowWoman();
    }
}

YellowMan

package abstractFactory;

public class YellowMan extends Man{
    @Override
    public void manProduce() {
        System.out.println("生产一个黄色皮肤男人");
    }
}

YellowWoman

package abstractFactory;

public class YellowWoman extends Woman{
    @Override
    public void womanProduce() {
        System.out.println("生产一个黄色皮肤的女人");
    }
}

 

3.注意编程规范。

标签:package,class,factory,模式,工厂,抽象,abstractFactory,new,public
From: https://www.cnblogs.com/JIANGzihao0222/p/17866503.html

相关文章

  • 建造者模式
    软件设计                 石家庄铁道大学信息学院 实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完成......
  • 命令模式
    [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。1. 提交类图;2.提交源代码;#include<iostream>#include<stack>usingn......
  • 适配器模式
    1模式动机在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象(老接口)的良好实现,同时又能满足新的应用环境所要求的接口?Adapter模式主要应用于“......
  • 实验6:原型模式
    2.提交源代码(用C++完成);3.注意编程规范。#include<iostream> classVector{private:    int*data;//指向向量数据的指针    intsize;//向量的长度 public:    //构造函数    Vector(intsize){        this->size=size;   ......
  • 实验7:单例模式
     本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图;2.提交源代码;3.注......
  • 实验8:适配器模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 画出对应的类图;2.提交源代码;3.注意编......
  • 实验9:桥接模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。#include<iostream>......
  • 实验10:组合模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。1.文件的执行不需真正实现,只需简单提示即可;2.提交源代码;3.......
  • FPGA 实现SPI 主机双工通信 CS前后肩可调 操作时钟频率可调 ,SPI模式可调,传输位宽可
    1//testbench2`timescale1ns/1ns3modulelcd_spi_m_tb();4regrst_n_i;5regspi_clkx_i;6reg[31:0]spi_data_i;7regspi_start;8regspi_miso_r1,spi_miso_r2;9wirespi_miso_i;10wire[0:0]spi_done;11wir......
  • MFC的CFile类以追加模式写文件
    CFile类的Open函数有CFile::modeNoTruncate模式,该模式是非截断的意思,再配合CFile::modeCreate,意味着如果文件不存在,则创建,如果文件存在,则不会将文件内容清空。当对文件进行追加写入时,有一个小细节就是打开文件模式中虽然添加了这两种OpenFlag,但是文件指针并未移动到末尾,因此追加出......