首页 > 其他分享 >享元模式

享元模式

时间:2023-11-27 22:44:17浏览次数:27  
标签:享元 int 模式 IgoChessmanFactory Coordinates new IgoChessman public

[实验任务一]:围棋
设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。

import java.util.*;
//坐标类:外部状态类
class Coordinates{
    private int x;
    private int y;
    public Coordinates(int x,int y){
        this.x=x;
        this.y=y;
    }

    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;
    }
}


//围棋棋子类:抽象享元类
abstract class IgoChessman{
    public abstract String getColor();
    public void locate(Coordinates coord){
        System.out.println("棋子颜色:"+this.getColor()+",棋子位置:"+coord.getX()+","+coord.getY());
    }
}

//黑色棋子类:具体享元类
class BlackIgoChessman extends IgoChessman{
    public String getColor(){
        return "黑色";
    }
}

//白色棋子类:具体享元类
class WhiteIgoChessman extends IgoChessman{
    public String getColor(){
        return "白色";
    }
}

//围棋棋子工厂类:享元工厂类
class IgoChessmanFactory{
    private static IgoChessmanFactory instance = new IgoChessmanFactory();
    private static Hashtable hashtable;

    private IgoChessmanFactory(){
        hashtable = new Hashtable();
        IgoChessman black,white;
        black = new BlackIgoChessman();
        hashtable.put("b", black);
        white = new WhiteIgoChessman();
        hashtable.put("w",white);
    }
    public static IgoChessmanFactory getInstance(){
        return instance;
    }
    public static IgoChessman getIgoChessman(String color){
        return (IgoChessman) hashtable.get(color);
    }
}

public class Client {
    public static void main(String[] args) {
        IgoChessman black1,black2,black3,white1,white2;
        black1 = IgoChessmanFactory.getIgoChessman("b");
        black2 = IgoChessmanFactory.getIgoChessman("b");
        black3 = IgoChessmanFactory.getIgoChessman("b");
        System.out.println("判断两颗黑棋是否相同:"+(black1==black2));
        white1 = IgoChessmanFactory.getIgoChessman("w");
        white2 = IgoChessmanFactory.getIgoChessman("w");
        System.out.println("判断两颗白棋是否相同:"+(white1==white2));
        black1.locate(new Coordinates(1,2));
        black2.locate(new Coordinates(3,4));
        black3.locate(new Coordinates(1,3));
        white1.locate(new Coordinates(2,4));
        white2.locate(new Coordinates(2,5));

    }
}


标签:享元,int,模式,IgoChessmanFactory,Coordinates,new,IgoChessman,public
From: https://www.cnblogs.com/yzx-sir/p/17860749.html

相关文章

  • Rancher五--在SELinux模式下安装Rancher-RHEL/CentOS
    在SELinux模式下安装Rancher-RHEL/CentOS从1.6+版本后支持为了使Rancher在RHEL/CentOS的SELinux模式下正常工作,您需要在安装有RPM包container-selinux-2.14(或更高的版本)的主机上运行RancherServer容器。同时,全部的agent主机也要安装这个包。如果您安装了较低版本的container-sel......
  • Idea中使用Debug模式​详解
    Idea中使用Debug模式Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。Debug开篇首先看下IDEA中Debug模式下的界面。如下是在......
  • Kafka3.6.0 linux 安装,非zookeeper模式
    参考:安装Kafka3.3.1及kraft运行,告别zookeeper_kafka3.3.1jdk无需zookeeper,kafka3.0版本集群安装实战 操作系统:ubutun18.04LTS1.下载到kafka官网下载2.上传到服务器指定位置3.解压到指定目录,这里我放到/opt下tar-xzvfkafka_2.13-3.6.0.tgz-C/opt/4.修改配置:因为......
  • GMAC网卡Fixed-Link模式
    GMAC网卡Fixed-Link模式GMACfixed-link固定链接模式,mac与对端的连接方式是写死的,通常用于mactomac(不排除mactophy的情况)。内核要支持fixed-link模式,需要打开CONFIG_FIXED_PHY配置。社区版linux的gmac网卡platform平台驱动中,在设备树默认下支持fixed-link,gmac网卡platform平......
  • cocos creator中的MVC设计模式
    MVC模式非常得火,今天小编就来说说Unity或cocoscreator这类可视化+组件化开发的工具怎么来做MVC。MVC中的M指的是Model,V指的是视图,C指的是控制,接下来我们通过view,Ctrl,Model依次来说明我们基于unity/cocoscreator这类工具的MVC的开发框架中通常是怎么处理的。v......
  • 观察者模式--Java实现
    相关类图具体代码//Observer.javapackageorg.example.test019;publicinterfaceObserver{publicvoidbuy();publicvoidcry();}//Subject.javapackageorg.example.test019;importjava.util.ArrayList;publicabstractclassSubject{protect......
  • 状态模式--Java实现
    具体代码//Account.javapackageorg.example.test020;publicclassAccount{publicAccountStategetAccountState(){returnaccountState;}publicvoidsetAccountState(AccountStateaccountState){this.accountState=accountState;......
  • 设计模式实验
    软件设计                 石家庄铁道大学信息学院 实验21:观察者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解观察者模式的动机,掌握该模式的结构;2、能够利用观察者模式解决实际问题。    [实验任务一]:股票提醒......
  • 策略模式--Java实现
    具体代码//Travel.javapackageorg.example.test021;publicinterfaceTravel{publicvoidtravel();}//Person.javapackageorg.example.test021;publicclassPerson{publicTravelgetTravel(){returntravel;}publicvoidsetTrav......
  • Java设计模式之命令模式
    命令模式介绍命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。下......