26.享元模式

来源:互联网 发布:java商城分销系统源码 编辑:程序博客网 时间:2024/06/07 04:44
package flyweightPattern;import java.util.Hashtable;/* * 享元模式: * 主要用于减少创建对象的数量,以减少内存占用和提高性能。 * 也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。  * 这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 * 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 *  *享元不是单利:单利模式是一个类只能有一个实例 但是享元模式的一个类可以有多个实例 * *  * */public class FlyweightPattern {public static void main(String[] args) {//工厂实例FlyweightFactory factory = new FlyweightFactory();//创建一个xxxFlyweight xxx = factory.getFlyweight("xxx");xxx.Opration();//创建一个yyyFlyweight yyy = factory.getFlyweight("yyy");yyy.Opration();//创建一个zzzFlyweight zzz = factory.getFlyweight("zzz");zzz.Opration();//再创建一个xxxFlyweight xxx2 = factory.getFlyweight("xxx");xxx2.Opration();System.out.println("工厂中一共存了:"+factory.GetCount()+"个对象!");}}/* * 所有享元体的父类或接口  可以接受并作用于外部状态 */abstract class Flyweight{ protected String name;public Flyweight(String name){this.name = name;}public abstract void Opration();  }/* * 享元类 */class ConcreteFlyweight extends Flyweight{public ConcreteFlyweight(String name) {super(name);}//操作public void Opration() {System.out.println("享元:"+name);}}/* * 享元类 */class NFlyweight extends Flyweight{public NFlyweight(String name) {super(name);}//操作public void Opration() {System.out.println("不需要享元:"+name);}}/* * 享元产生的工厂类 */class FlyweightFactory{private Hashtable<String, Flyweight> flys = new Hashtable<>();public Flyweight getFlyweight(String name){if(!flys.contains(name))flys.put(name,new ConcreteFlyweight(name));return flys.get(name);}public int GetCount(){return flys.size();}}

原创粉丝点击