当客户需要的网站结构相似度很高,而且都不是访问量很高的网站。那么,就可以通过多个网站共用一套代码的方法,快速创建网站,通过不同ip地址区分,可以让维护和扩展更加容易。
目录
一、模式初识
1.什么是享元模式?
运用共享技术有效的支持大量细粒度对象。
2.如何处理细粒度对象?
将对象的状态分为外部状态和内部状态,将可以共享的状态作为内部状态,而在适当情况将外部对象作为参数传递给对象。
3.享元模式在编辑器系统中大量使用
二、模式深入
1.享元模式的核心是什么?
享元模式的重点是分离变与不变,内部状态是不变的,外部状态是变的。
2.何时使用享元模式?
满足一下四个条件的系统可以使用享元对象
①一个系统有大量的对象
②这些对象消耗大量的内存
③这些对象的状态中的大部分都可以外部化
④这些对象可以按照内部状态分为很多的组,当把外部对象从对象中剔除时,每一个组都可以仅用一个对象代替。
3.享元模式的优缺点
优点:大幅度的降低内存中对象的数量,节省内存空间
缺点:
①.享元模式可以使系统更加的复杂。为了使对象可以共享,需要将一些状态外部化。
②.享元模式将向原对象的状态外部化,而读取外部状态使得运行时间变长。
4.享元模式的本质:分离与共享
三、模式实例
用享元模式实现五子棋操作(java语言)

package a01a;
public class ChessPlace {
private int x;
private int y;
private static int number=0;
public ChessPlace(int x, int y) {
super();
this.x = x;
this.y = y;
}
public ChessPlace() {
super();
// TODO Auto-generated constructor stub
}
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 int getNumber() {
return number;
}
public void setNumber(int number) {
ChessPlace.number = number;
}
}
package a01a;
public interface Chess {
public abstract void play(ChessPlace che);
}
package a01a;
public class Whitechess implements Chess {
@Override
public void play(ChessPlace che) {
// TODO Auto-generated method stub
System.out.println("白棋位置为:"+"("+che.getX()+","+che.getY()+")");
}
}
package a01a;
public class Blackchess implements Chess {
@Override
public void play(ChessPlace che) {
// TODO Auto-generated method stub
System.out.println("黑棋位置为:"+"("+che.getX()+","+che.getY()+")");
}
}
package a01a;
public class ChessFactory {
private Chess whiteChess;
private Chess blackChess;
public Chess getChess(int key) {
if(key%2==0) {
if (whiteChess == null) {
System.out.println("===创建白棋对象===");
whiteChess = new Whitechess();
ChessPlace cp=new ChessPlace();
cp.setNumber(cp.getNumber()+1);
}
return whiteChess;
}
else {
if (blackChess == null) {
System.out.println("===创建黑棋对象===");
blackChess = new Blackchess();
ChessPlace cp=new ChessPlace();
cp.setNumber(cp.getNumber()+1);
}
return blackChess;
}
}
public void ChessNumber() {
ChessPlace cp=new ChessPlace();
System.out.println("创建的棋子种类为:"+cp.getNumber());
}
}
package a01a;
import java.util.Random;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
ChessFactory cf=new ChessFactory();
for (int i = 0; i < 6; i++) {
Chess c = cf.getChess(i);
ChessPlace place=new ChessPlace(i, new Random().nextInt(15));
c.play(place);
}
cf.ChessNumber();
}
}
2837

被折叠的 条评论
为什么被折叠?



