首页 > 编程语言 >享元模式--Java实现

享元模式--Java实现

时间:2023-10-17 15:34:53浏览次数:30  
标签:享元 Java -- Coordinates int Chess ChessFactory new public

画类图

在围棋中,黑棋和白棋对象均只有一个,但是它们可以在不同的位置进行共享;

具体代码实现

//Chess.java
package org.example.design010;

public abstract class Chess {
    public abstract String getColor();
    public void locate(Coordinates co){
        System.out.println(this.getColor()+"棋的位置是:("+co.getX()+","+co.getY()+")");
    }
}

//WhiteChess.java
package org.example.design010;

public class WhiteChess extends Chess{
    @Override
    public String getColor() {
        return "白";
    }
}

//BlackChess.java
package org.example.design010;

public class BlackChess extends Chess{
    @Override
    public String getColor() {
        return "黑";
    }
}

//Coordinates.java
package org.example.design010;

public class Coordinates {
    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Coordinates(int x, int y) {
        this.x = x;
        this.y = y;
    }

    private int x;
    private int y;
}

//ChessFactory.java
package org.example.design010;

import java.util.Hashtable;

public class ChessFactory {
    public static ChessFactory getChessFactory() {
        return chessFactory;
    }

    private static Hashtable hashTable;
    public ChessFactory(){
        hashTable=new Hashtable();
        Chess black,white;
        black=new BlackChess();
        hashTable.put("b", black);
        white=new WhiteChess();
        hashTable.put("w",white);
    }

    public static ChessFactory getInstance() {
        return chessFactory;
    }

    private static ChessFactory chessFactory=new ChessFactory();

    public static Chess getChess(String color){
        return (Chess) hashTable.get(color);
    }

}

//Client.java
package org.example.design010;

public class Client {
    public static void main(String[] args) {
        Chess black1,black2,black3,white1,white2;
        ChessFactory factory;
        factory=ChessFactory.getInstance();

        black1=ChessFactory.getChess("b");
        black2=ChessFactory.getChess("b");
        black3=ChessFactory.getChess("b");
        white1=ChessFactory.getChess("w");
        white2=ChessFactory.getChess("w");

        black1.locate(new Coordinates(1,2));
        black2.locate(new Coordinates(2,3));
        black3.locate(new Coordinates(3,4));
        white1.locate(new Coordinates(4,5));
        white2.locate(new Coordinates(5,6));

    }
}

标签:享元,Java,--,Coordinates,int,Chess,ChessFactory,new,public
From: https://www.cnblogs.com/liuzijin/p/17769655.html

相关文章

  • 关于pyinstaller打包exe踩过的坑
    打包成的exe无法用uvicorn开启fastapi的网络服务,解决办法:在uvicorn.run(app,host="127.0.0.1",port=8000)的上一句直接importuvicorn,参考fastapi的两种运行方式_fastapiasync-CSDN博客,这样可以导入uvicorn模块,而如果把importuvicorn放在文件顶部,那么就导入不了这个模块打......
  • ES6 module模块
    概述ES6中的module指的是JavaScript模块化规范中的一种。它通过export和import语法来导出和导入模块中的变量、函数、类等内容。使用ES6模块化的好处包括:解决了模块化的问题。消除了全局变量。管理加载顺序。使用在ES6模块中,一个文件代表一个模块当使用script标签加载模块时,需要......
  • linux下自动删除文件夹,如何在Linux中自动删除或清理/tmp文件夹内容?
    https://blog.csdn.net/weixin_36315079/article/details/116614583?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169752720316800211589266%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=1697527203168002115892......
  • 09学习技术的策略,先提问题
    学习一个技术,可以先提一个问题,然后去阅读资料去解答它,从而对这个技术有一定的了解。如果是范围十分宽的问题,那么要学会拆分,将大问题拆分为小问题。小问题用简短的文字回答它,这样逐个击破,积少成多,到后面即使是这个范围宽的问题,相信个人也会有很好的理解。举个例子吧,比如今天我想问,抖......
  • 成都IT自学好还是培训好?
    成都IT自学好还是培训好?在成都学IT技术,自学和参加培训都是获取知识和提升技能的有效途径,具体选择应根据个人情况和需求来决定。来简单分析一下自学和参加培训的一些优势:自学的优势:灵活性:自学允许您按照自己的节奏和时间安排学习,更具灵活性。资源丰富:网络上有大量的学习资源,如教程......
  • HDPE双壁波纹管,市政排污好帮手
    HDPE双壁波纹管是一种用于市政排污系统的重要设备,可以被视为市政排污的好帮手。HDPE双壁波纹管具有以下几个优点:优良的耐腐蚀性:HDPE材料具有优异的耐腐蚀性,可以抵抗各种化学物质的侵蚀,确保管道长久使用。高强度和刚度:HDPE双壁波纹管具有良好的强度和刚度,能够承受较大的外部负荷和压......
  • HDPE双壁波纹管材给排水系统的明星材料
    随着城市化进程的不断推进,给排水系统的建设也越来越受到重视。作为给排水系统的重要组成部分,管道材料的选择和设计也显得尤为重要。其中,HDPE双壁波纹管材作为一种新型的高密度聚乙烯管道材料,在市政给排水系统中得到了广泛应用。本文将从以下几个方面对HDPE双壁波纹管材进行详细介绍......
  • 全志R128驱动OLED屏幕步骤教程
    驱动OLED屏本文案例代码下载地址OLED驱动案例代码https://www.aw-ol.com/downloads?cat=24OLED,即有机发光二极管(OrganicLightEmittingDiode)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广......
  • 示波器探头类型和用法介绍
    本文将介绍各种探头的类型和用法什么是探头:示波器是电子工程师最常用的测量仪器,而示波器探头毫无疑问是示波器最常用的配件。示波器探头是连接被测电路与示波器输入端的电子部件。没有探头,示波器就成了个摆件,只能作为装饰品啦。在选择示波器探头之前,我们最好看看示波器的说明书......
  • kubectl 格式化输出
    1、显示Pod的更多信息,例如Node等:[root@k8s-master~]#kubectlgetpodnginx-585449566-qkwhc-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESnginx-585449566-qkwhc1/1Runnin......