首页 > 代码库 > java设计模式--享元模式

java设计模式--享元模式

享元模式(flyweight)

当需要有很多完全相同或相似的对象需要创建的时候,主要是相似的时候,我们可以用享元模式。尽可能少创建对象,节省内存。

享元模式主要有4中角色

1.享元的工厂

2.抽象享元对象

2.内部状态对象:可以共享的

3.外部状态对象:不可以共享的

下面以围棋的棋子为例:每个棋子都是一个对象,但是每个棋子的大部分都一样,只有颜色,摆放位置不一样,这样就没必要每个棋子都创建一个对象,把相同的和不同的分离开来。

//享元类抽象public interface FlyWeight {        void setColor(String color);        String getColor();        void diplay(Waibu c);    }//内部,可以共享的分离出来,引用外部不可以共享的class Neibu implements FlyWeight{        private String color;        public Neibu(String color) {        this.color = color;    }    public void setColor(String color) {        this.color = color;            }    public String getColor() {        return color;    }    public void diplay(Waibu c) {        System.out.println("棋子颜色"+color);        System.out.println("棋子为止"+c.getX()+":"+c.getY());            }    }//外部,不可以共享的分离出来class Waibu{        private String x;    private String y;        public Waibu(String x, String y) {        this.x = x;        this.y = y;    }    public String getX() {        return x;    }    public void setX(String x) {        this.x = x;    }    public String getY() {        return y;    }    public void setY(String y) {        this.y = y;    }
//享元工厂public class FlyWeightFactory {        private static Map<String, FlyWeight> map = new HashMap<String, FlyWeight>();        public static FlyWeight get(String color){        if(map.get(color)!=null){            return map.get(color);        }else{            FlyWeight flyWeight = new Neibu(color);            map.put(color, flyWeight);            return flyWeight;        }            }    }
public static void main(String[] args) {        FlyWeight f1 = FlyWeightFactory.get("白色");        FlyWeight f2 = FlyWeightFactory.get("白色");        f1.diplay(new Waibu("25", "25"));        f2.diplay(new Waibu("50", "50"));    }

白色和白色其实是一个对象不用创建两个,位置可由外部状态定义

技术分享

java设计模式--享元模式