package com.eric.结构型模式.享元模式.引例;
/**
* @author Eric
* @ProjectName my_design_23
* @description 抽象享元角色
* @CreateTime 2020-12-03 11:27:05
*/
public interface Flyweight {
//业务方法
public abstract void operation(String extrinsicState);
}
package com.eric.结构型模式.享元模式.引例;
/**
* @author Eric
* @ProjectName my_design_23
* @description 具体享元
* @CreateTime 2020-12-03 11:29:24
*/
public class ConcreteFlyweight implements Flyweight{
private String intrinsicState; //内部状态
ConcreteFlyweight(String intrinsicState){
this.intrinsicState = intrinsicState;
}
@Override
public void operation(String extrinsicState) {
System.out.println("内部状态"+intrinsicState+"---外部状态"+extrinsicState);
}
}
package com.eric.结构型模式.享元模式.引例;
import java.util.HashMap;
import java.util.Map;
/**
* @author Eric
* @ProjectName my_design_23
* @description 享元工厂
* @CreateTime 2020-12-03 11:33:03
*/
public class FlyweightFactory {
private static Map<String,Flyweight> pool = new HashMap<String, Flyweight>();
private FlyweightFactory(){}//私有构造方法
public static Flyweight getFlyweight(String intrinsicState){
Flyweight flyweight = pool.get(intrinsicState);
if(flyweight == null){
flyweight = new ConcreteFlyweight(intrinsicState);
pool.put(intrinsicState,flyweight);
}
return flyweight;
}
}
package com.eric.结构型模式.享元模式.例1;
/**
* @author Eric
* @ProjectName my_design_23
* @description 棋子接口规范
* @CreateTime 2020-12-03 13:17:38
*/
public interface Chesspiece {
//落子
void put(int x,int y);
}
package com.eric.结构型模式.享元模式.例1;
/**
* @author Eric
* @ProjectName my_design_23
* @description 棋子具体享元
* @CreateTime 2020-12-03 13:48:48
*/
public class ChesspieceFlyweight implements Chesspiece {
private String color;
public ChesspieceFlyweight(String color){
this.color = color;
}
@Override
public void put(int x, int y) {
System.out.println("在("+x+","+y+")位置放了一个"+color+"子");
}
}
package com.eric.结构型模式.享元模式.例1;
/**
* @author Eric
* @ProjectName my_design_23
* @description 棋子工厂
* @CreateTime 2020-12-03 13:55:23
*/
public class ChesspieceFactory {
private static final Chesspiece WHITE = new ChesspieceFlyweight("白");
private static final Chesspiece BLACK = new ChesspieceFlyweight("黑");
public static Chesspiece getChesspiece(String color){
if("白".equals(color))return WHITE;
else if("黑".equals(color))return BLACK;
return null;
}
}
package com.eric.结构型模式.享元模式.例1;
/**
* @author Eric
* @ProjectName my_design_23
* @description 开始游戏
* @CreateTime 2020-12-03 14:00:09
*/
public class Game {
public static void main(String[] args) {
Chesspiece chesspiece1 = ChesspieceFactory.getChesspiece("黑");
chesspiece1.put(3,3);
Chesspiece chesspiece2 = ChesspieceFactory.getChesspiece("白");
chesspiece2.put(3,4);
Chesspiece chesspiece3= ChesspieceFactory.getChesspiece("黑");
chesspiece3.put(2,4);
Chesspiece chesspiece4 = ChesspieceFactory.getChesspiece("白");
chesspiece4.put(4,4);
}
}
原文:https://www.cnblogs.com/zyl-0110/p/14204692.html