zoukankan      html  css  js  c++  java
  • 2021/11/16

    享元模式

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

    package com;
    
    
    class BlackIgoChessman extends IgoChessman{
     
        @Override
        public String getColor() {
            // TODO Auto-generated method stub
            return "黑色";
        }
     
    }
    
    BlackIgoChessman
    

      

    package com;
    
    
    class Coordinates {
        
        private int x;
        private int y;
        
        public Coordinates(int x,int y) {
            // TODO Auto-generated constructor stub
            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;
        }
        
    }
    

      

    package com;
    
    
    abstract class IgoChessman {
        
        public abstract String getColor();
        public void locate(Coordinates coord){
            System.out.println("棋子颜色:"+this.getColor()+",棋子位置:"+coord.getX()+","+coord.getY());
        }
    }
    

      

    package com;
    
    import java.util.Hashtable;
    
    public class IgoChessmanFactory {
        
        private static IgoChessmanFactory instance = new IgoChessmanFactory();
        private static Hashtable ht;
        
        public IgoChessmanFactory() {
            // TODO Auto-generated constructor stub
            ht = new Hashtable();
            IgoChessman black,white;
            black = new BlackIgoChessman();
            ht.put("b", black);
            white = new WhiteIgoChessman();
            ht.put("w", white);
        }
        
        public static IgoChessmanFactory getInstance(){
            return instance;
        }
        
        public static IgoChessman getIgoChessman(String color){
            return (IgoChessman)ht.get(color);
        }
    }
    
    IgoChessmanFactory
    

      

    package com;
    
    class WhiteIgoChessman extends IgoChessman{
         
        @Override
        public String getColor() {
            // TODO Auto-generated method stub
            return "白色";
        }
     
    }
    

      

    复制代码
    package com;
    
    public class Client {
        
        public static void main(String[] args) {
            IgoChessman black1,black2,black3,white1,white2;
            IgoChessmanFactory factory;
            factory = IgoChessmanFactory.getInstance();
            black1 = factory.getIgoChessman("b");
            black2 = factory.getIgoChessman("b");
            black3 = factory.getIgoChessman("b");
            System.out.println("判断两颗黑棋是否相同:"+(black1==black2));
            white1 = factory.getIgoChessman("w");
            white2 = factory.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, 5));
            white2.locate(new Coordinates(2, 4));
        }
    }
    

      

  • 相关阅读:
    [原]Linux 命令行浏览器
    Linux 命令行浏览器
    [原]Linux 命令行 发送邮件
    Linux 命令行 发送邮件
    [原]Linux 修改时区
    Linux 修改时区
    [原]Ubuntu 下安装Mongodb
    离线解密RDP凭证密码
    [Win]权限维持
    Nginx反向代理
  • 原文地址:https://www.cnblogs.com/qiangini/p/15564275.html
Copyright © 2011-2022 走看看