首页 > 其他分享 >10.30

10.30

时间:2024-11-13 23:13:09浏览次数:1  
标签:return String 10.30 factory Person Override SkinColor

 

实验4:抽象工厂模式

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

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

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

 

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

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

 

 

实验要求:

 

 

源代码

package org.example;

// 抽象产品A:Person
abstract class Person {
    abstract String getMalePerson();
    abstract String getFemalePerson();
}

// 具体产品A1:AsianPerson
class AsianPerson extends Person {
    @Override
        String  getMalePerson() {
        return "男性";
    }
    @Override
    String  getFemalePerson() {
        return "女性";
    }
}

// 具体产品A2:AfricanPerson
class AfricanPerson extends Person {
    @Override
    String  getMalePerson() {
        return "男性";
    }

    @Override
    String getFemalePerson() {
        return "女性";
    }
}
class EuropePerson extends Person {
    @Override
    String  getMalePerson() {
        return "男性";
    }

    @Override
    String getFemalePerson() {
        return "女性";
    }
}

// 抽象产品B:SkinColor
abstract class SkinColor {
    abstract String getColor();
}

// 具体产品B1:AsianSkinColor
class AsianSkinColor extends SkinColor {
    @Override
    String getColor() {
        return "Yellow"; // 简化表示,实际情况可能更复杂
    }
}

// 具体产品B2:AfricanSkinColor
class AfricanSkinColor extends SkinColor {
    @Override
    String getColor() {
        return "Black"; // 简化表示,实际情况可能更复杂
    }
}
class EuropeSkinColor extends SkinColor {
    @Override
    String getColor() {
        return "White"; // 简化表示,实际情况可能更复杂
    }
}
// 抽象工厂:PersonFactory
interface PersonFactory {
    Person createPerson();
    SkinColor createSkinColor();
}

// 具体工厂1:AsianFactory
class AsianFactory implements PersonFactory {
    @Override
    public Person createPerson() {
        return new AsianPerson();
    }

    @Override
    public SkinColor createSkinColor() {
        return new AsianSkinColor();
    }
}

// 具体工厂2:AfricanFactory
class AfricanFactory implements PersonFactory {
    @Override
    public Person createPerson() {
        return new AfricanPerson();
    }

    @Override
    public SkinColor createSkinColor() {
        return new AfricanSkinColor();
    }
}
class EuropeFactory implements PersonFactory {
    @Override
    public Person createPerson() {
        return new EuropePerson();
    }

    @Override
    public SkinColor createSkinColor() {
        return new EuropeSkinColor();
    }
}
// 客户端代码
public class Client {
    public static void main(String[] args) {
        PersonFactory factory;

        // 使用亚洲工厂创建亚洲人及其肤色
        factory = new AsianFactory();
        Person asianPerson = factory.createPerson();
        SkinColor asianSkinColor = factory.createSkinColor();
        System.out.println("亚洲"+asianPerson.getMalePerson()+"性肤色: " + asianSkinColor.getColor());
        System.out.println("亚洲"+asianPerson.getFemalePerson()+"性肤色: " + asianSkinColor.getColor());
        // 使用非洲工厂创建非洲人及其肤色
        factory = new AfricanFactory();
        Person africanPerson = factory.createPerson();
        SkinColor africanSkinColor = factory.createSkinColor();
        System.out.println("非洲"+africanPerson.getMalePerson()+"性肤色: " + africanSkinColor.getColor());
        System.out.println("非洲"+africanPerson.getFemalePerson()+"性肤色: " + africanSkinColor.getColor());
        factory =new EuropeFactory();
        Person EuropePerson = factory.createPerson();
        SkinColor EuropeSkinColor = factory.createSkinColor();
        System.out.println("欧洲"+EuropePerson.getMalePerson()+"性肤色: " + EuropeSkinColor.getColor());
        System.out.println("欧洲"+EuropePerson.getFemalePerson()+"性肤色: " + EuropeSkinColor.getColor());
    }
}

 

 

标签:return,String,10.30,factory,Person,Override,SkinColor
From: https://www.cnblogs.com/zzqq1314/p/18545020

相关文章

  • 10.30博客
    今天学习了二叉树的内容二叉树的遍历是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,而且仅能访问一次(说明不可二次访问,一遍而过)。遍历一颗二叉树便要决定对根结点N、左子树L和右子树的访问顺序。求度为1的节点个数intDegree(BTree*t){if(!t)return0;el......
  • 日常学习(10.30)
    IOC与AOP    在学习Spring时,初次接触到IOC与AOP,他们是Spring框架的核心技术。                IOC(控制反转)是一种设计思想,用于实现对象之间的解耦和依赖管理。它通过将对象的创建和依赖关系的管理从应用代码中抽离出来,交给外部容器来处理,从而降低了......
  • 10.30日博客
    序列容器vector用途:动态数组,支持随机访问。特性:元素连续存储。插入和删除操作在尾部效率较高,中间操作较慢。常用方法:push_back():在容器末尾添加元素。pop_back():移除容器末尾的元素。at(index):通过索引访问元素。size():返回容器大小。list用途:双向链表,支持高效的插入......
  • 10.30 模拟赛
    复盘T1。好像很好做。先想了一个\(\mathcalO(n|c_{i,j}|^2)\)但是带四倍常数的做法。感觉加上一些优化和卡常后问题不大。于是开写。代码好长!!!调试好久!!!调完后样例6跑20s,最终优化后还是7s。实在优化不了了于是考虑换做法。发现枚举三条边后,剩下的用类似扫描线边扫边用树......
  • 2024.10.30 2022广西省赛
    Solved:11/12Penalty:1059Rank:1/146(N+2)Dirt:48%ProblemABCDEFGHIJKL题数罚时Time1122141271076128398415916111059dirt31132A,B,G,H,L:签到F直接扔一个带修莫队板子上去就过了。虽然1000的值域应该有点说法。。。#inc......
  • 10.30
    actionlib_server_node.cppactionlib_client_node.cppActionlibExMsg.action#goaldefinitionint32whole_distance---#resultdefinitionboolis_finish---#feedbackint32moving_meter<build_depend>message_generation</build_depend><ex......
  • 闲话 10.30
    别样的丁真让我讲T2,所以提前写点东西出来。诗人小G首先根据题意,比较好写的是\(\mathcal{O(n^2)}\)的转移:\[f_i=\min_{j=0}^{i-1}\f_{j}+abs(sum_i-sum_j-L-1)^p\]其中\(sum\)为句子长度的前缀和。发现可优化的点是后面一坨柿子,我们把它记为\(G_{i,j}=abs(sum_i-sum_j-......
  • 10.30 索引,外键
    索引一、索引的介绍1、什么是索引?(1)定义:索引是一种数据结构一个索引在存储的表中的数据结构;(2)索引是在表的字段上创建的(3)索引包含了一列值,这个值保存在一个数据结构中2、索引作用?(1)保证数据记录的唯一性(2)实现表与表之间的参照性(3)减少排序和分组的时间(例如在使用orderby,gr......
  • A-10.30.0.21-核心-主
    SHDXYQB4-108-C-04_C-05-CSW-RGS6250-M1-01U40#showrunBuildingconfiguration...Currentconfiguration:11428bytesversion11.0(5)B9P120hostnameSHDXYQB4-108-C-04_C-05-CSW-RGS6250-M1-01U40privilegeexecalllevel1showrunning-configprivilegeexecalllev......
  • A-10.30.0.23-接入-主
    SHDXYQB4-108-C-04_C-05-ASW-RGS6250-M1-01U37#showrun Buildingconfiguration...Currentconfiguration:15621bytesversion11.0(5)B9P120hostnameSHDXYQB4-108-C-04_C-05-ASW-RGS6250-M1-01U37privilegeexecalllevel1showrunning-configprivilegeexeclevel......