网站开发流程介绍,凡科建站是放在哪个服务器上,网站策划案怎么做,网站主页设计布局设计模式—结构型模式之享元模式
享元模式(Flyweight Pattern)#xff0c;运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象#xff0c;而这些对象都很相似#xff0c;状态变化很小#xff0c;可以实现对象的多次复用。对象结构型。 在享元模式中可以共…设计模式—结构型模式之享元模式
享元模式(Flyweight Pattern)运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象而这些对象都很相似状态变化很小可以实现对象的多次复用。对象结构型。 在享元模式中可以共享的相同内容称为内部状态(IntrinsicState)而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State)由于区分了内部状态和外部状态因此可以通过设置不同的外部状态使得相同的对象可以具有一些不同的特征而相同的内部状态是可以共享的。 在享元模式中通常会出现工厂模式需要创建一个享元工厂来负责维护一个享元池(Flyweight Pool)用于存储具有相同内部状态的享元对象。
享元模式可以理解为池化技术。
享元模式包含如下角色
Flyweight: 抽象享元类 ConnectionConcreteFlyweight: 具体享元类 ConnectionImpluser,pwd,urlUnsharedConcreteFlyweight: 非共享具体享元类ConnectionImplstateFlyweightFactory: 享元工厂类可以写一个简单工厂因为产品就一个Connection。
例子
比如一个网吧中有很多电脑每个电脑都可以被人使用但是当有人在使用这个电脑就不能被其他人使用了。这便是享元模式的实例。
/*** 抽象电脑类*/
public abstract class AbstarctComputer {//是否能被使用boolean canUse true;//使用电脑abstract void useComputer();//使用完成abstract void useComputerCompletion();public boolean isCanUse(){return canUse;}
}实际的电脑类如下
public class MyComputer extends AbstarctComputer{//电脑编号private String id;public MyComputer(String id) {this.id id;}/*** 使用电脑*/Overridevoid useComputer() {System.out.println(this.id 号电脑使用中);//设置其他人不能使用this.canUse false;}Overridevoid useComputerCompletion() {System.out.println(this.id 号电脑使用完成);//设置其他人可以使用this.canUse true;}public String getId() {return id;}
}网吧类如下
public class MyInternetCafe {//电脑集合--》池子private static MapString,MyComputer computerPool new HashMap();static {MyComputer myComputer1 new MyComputer(111);MyComputer myComputer2 new MyComputer(222);computerPool.put(myComputer1.getId(),myComputer1);computerPool.put(myComputer2.getId(),myComputer2);}/*** 通过id返回能够使用的电脑如果找不到返回一个可以使用的* param id* return*/public static AbstarctComputer getComputer(String id){MyComputer computer computerPool.get(id);if(computer null || !computer.isCanUse()) {//如果没有这个id 或者 不能被使用找一个可以使用的for (MyComputer myComputer : computerPool.values()) {if(myComputer.isCanUse()){System.out.println(您要使用的id号电脑正在被使用或者无此电脑为您找到一台电脑id为myComputer.getId());return myComputer;}}//都在使用返回空return null;}return computer;}
}测试类如下
public class Test {public static void main(String[] args) {AbstarctComputer computer MyInternetCafe.getComputer(111);computer.useComputer();AbstarctComputer computer1 MyInternetCafe.getComputer(111);computer1.useComputer();computer.useComputerCompletion();AbstarctComputer computer2 MyInternetCafe.getComputer(111);computer2.useComputer();}
}运行截图如下