首页 > 编程语言 >抽象工厂模式--Java实现

抽象工厂模式--Java实现

时间:2023-10-14 09:33:35浏览次数:33  
标签:Java show -- package design002 抽象 org java public

画类图

用人的肤色和性别进行抽象工厂方法模式的实现,肤色和性别组成产品等级结构和产品族;

具体代码实现

项目结构:

//AbstractFactory.java
package org.example.design002;

public interface AbstractFactory {
    public Man createMan();
    public Woman createWoman();
}

//YellowFactory.java
package org.example.design002;

public class YellowFactory implements AbstractFactory{
    @Override
    public Man createMan() {
        return new YellowMan();
    }

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

//BlackFactory.java
package org.example.design002;

public class BlackFactory implements AbstractFactory{
    @Override
    public Man createMan() {
        return new BlackMan();
    }

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

//WhiteFactory.java
package org.example.design002;

public class WhiteFactory implements AbstractFactory{
    @Override
    public Man createMan() {
        return new WhiteMan();
    }

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

//Man.java
package org.example.design002;

public interface Man {
    public void show();
}

//Woman.java
package org.example.design002;

public interface Woman {
    public void show();
}

//YellowMan.java
package org.example.design002;

import java.sql.SQLOutput;

public class YellowMan implements Man{
    @Override
    public void show() {
        System.out.println("黄皮肤的男性");
    }
}

//YellowWoman.java
package org.example.design002;

public class YellowWoman implements Woman{
    @Override
    public void show() {
        System.out.println("黄皮肤的女性");
    }
}

//BlackMan.java
package org.example.design002;

public class BlackMan implements Man{
    @Override
    public void show() {
        System.out.println("黑皮肤的男性");
    }
}

//BlackWoman.java
package org.example.design002;

public class BlackWoman implements Woman{
    @Override
    public void show() {
        System.out.println("黑皮肤的男性");
    }
}

//WhiteMan.java
package org.example.design002;

public class WhiteMan implements Man{
    @Override
    public void show() {
        System.out.println("白皮肤的男性");
    }
}

//WhiteWoman.java
package org.example.design002;

public class WhiteWoman implements Woman{
    @Override
    public void show() {
        System.out.println("白皮肤的女性");
    }
}

//Main.java
package org.example.design002;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        AbstractFactory abf;
        Man m;
        Woman w;

        System.out.println("请选择:1、白皮肤;2、黑皮肤;3、黄皮肤");
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        if(a==1){
            abf=new WhiteFactory();
            m=abf.createMan();
            m.show();

            w=abf.createWoman();
            w.show();
        }else if(a==2){
            abf=new BlackFactory();
            m=abf.createMan();
            m.show();

            w=abf.createWoman();
            w.show();
        }else if(a==3){
            abf=new YellowFactory();
            m=abf.createMan();
            m.show();

            w=abf.createWoman();
            w.show();
        }else{
            System.out.println("不存在这种工厂模式哦~");
        }




    }
}

标签:Java,show,--,package,design002,抽象,org,java,public
From: https://www.cnblogs.com/liuzijin/p/17763669.html

相关文章

  • seqkit 软件根据序列ID删除指定的序列
     001、单个删除(base)[root@pc1test1]#lsa.fa(base)[root@pc1test1]#cata.fa##测试文件>chr1tttcccggg>chr2tttgggjjjcccjjjjjj>chr3ccc>chr4aaaaatt(base)[root@pc1test1]#seqkitgrep-v-p"chr1"a.fa......
  • 数据结构之队列(双向队列)
    概念双向队列(Double-endsQueues简称Dequeue)是一种前后2端都可以添加数据(入队)、移除(出队)数据的有序线性表。特点双向队列(Deque,全名DoubleEndedQueue)是一种具有两个指针的线性表,允许从两端都可以进行插入和删除操作即双向队列可以在任意一端进行元素的插入和删除操作,而单向队......
  • 基于Win 自带的.NET FrameWork平台,使用文本文件编写C#代码,命令行编译以及引用第三方库
    转载自https://www.infoq.cn/article/2015/12/visual-studio-windows 不用VisualStudio也能开发.NETWindows应用邵思华2015-12-29本文字数:2915字阅读完需:约10分钟对于.NET应用的开发人员而言,以VisualStudio(简称VS)作为首选的开发工具应当是一种最......
  • C++四舍五入
    C++四舍五入1.利用C++输出函数cout<<setprecision(4)<<1.94999<<endl;只使用setprecision:控制浮点数的输出位数,注意控制的是总输出的数字个数,不是小数点后,并且将默认将小数后面的末尾0省略,并且将四舍五入cout<<fixed<<setprecision(2)<<1.48999<<endl;使用fixedsetprecisi......
  • 1.5 为x64dbg编写插件
    任何一个成熟的软件都会具有可扩展性,可扩展性是现代软件的一个重要特征,因为它使软件更易于维护和适应变化的需求,x64dbg也不例外其可通过开发插件的方式扩展其自身功能,x64dbg提供了多种插件接口,包括脚本插件、DLL插件、Python插件和.NET插件等。此外,x64dbg还支持用户自定义命令和快......
  • 静态路由
    网络部署思路拓扑的设计—IP地址的规划实施1、底层—所有需要配置IP地址的节点配置一个合法的IP地址2、路由—全网可达3、策略和优化4、测试5、排错6、维护和升级路由器的转发原理路由表是路由器中维护的路由条目的集合,路由器根据路由表做路径选择。路由......
  • python程序打包exe
    最前先提醒下,如果项目没有专门的环境,建议搞个虚拟环境打包,这样打包的exe会小点。丢一段虚拟环境命令方便复制:新建虚拟环境:condacreate-nyour_env_namepython=3.8激活虚拟环境:condaacitvateyour_env_name在这个环境里安装好需要的包。 首先安装Pyinstaller,cmd输入:pip......
  • 根据实际工作经验总结一下个人.Net高并发处理做法
    场景描述1.用户下单,商品库存已经不足了,但还是扣减了2.医生开方,药品不足了,但还是被开了出去···类似场景解决思路思路1:预扣库存用户下单时,系统先进行预扣库存操作,然后后将“下单业务”发布到MQ(消息队列)进行处理,成功通知,失败回滚预扣库存操作对于预扣库存时可能出现的“......
  • Redis分布式锁实现一直到Redis相关操作总结
    FreeRedis实现源码///<summary>///开启分布式锁,若超时返回null///</summary>///<paramname="name">锁名称</param>///<paramname="timeoutSeconds">超时(秒)</param>///<paramname="autoDelay">自动延长锁超时时......
  • QOJ # 4588. Feeder Robot
    题面传送门有一个机器人初始在\(A\)点,每次会向左向右随机移动,并给所到位置的\(B\)值\(+1\),包括起点。当加\(m\)次后停止,设终点为\(t\),问最后\((t,B)\)二元组总共有多少种可能。\(n\leq10^5,m\leq2\times10^5\)。首先我们需要考虑如何找到一个\((t,B)\)二元组合......