设计模式17---享元模式

1.客户需要做网站,有很多客户,每个需求细节不同,但是主体框架类似,并且如何有很多客户的话,将会照成

大量的资源浪费,所以,把相同的部分进行共享,通过ID的方式来加以区别不同的部分。

2.UML

Flyweight定义了共享的部分,ConcreateFlyweight定义了内部状态,或者说相同的部分。

UnsharedFlyWeight 定义了外部状态,不同的部分。

3.code:

public abstract class WebSite {

    public abstract void Use(User user);

}
package com.jayfulmath.designpattern.flyweight;



import java.util.Hashtable;



public class WebSiteFactory {

    private Hashtable<String, WebSite> mTable = new Hashtable<>();

    

    public WebSite getWebSiteCategory(String key)

    {

        if(!mTable.contains(key))

        {

            mTable.put(key, new ConcreateWebSite(key));

        }

        

        return mTable.get(key);

    }

    

    public int getWebsiteCount()

    {

        return mTable.size();

    }

}
package com.jayfulmath.designpattern.flyweight;



public class User {

    String  name;



    public User(String name) {

        super();

        this.name = name;

    }

    

    

}
package com.jayfulmath.designpattern.flyweight;



public class ConcreateWebSite extends WebSite {



    String name;

    

    

    public ConcreateWebSite(String name) {

        super();

        this.name = name;

    }





    @Override

    public void Use(User user) {

        System.out.println("WebSite :"+name+"\t User:"+user.name);

    }



}
package com.jayfulmath.designpattern.flyweight;



import com.jayfulmath.designpattern.main.BasicExample;



public class FlyweightMain extends BasicExample {



    @Override

    public void startDemo() {

        WebSiteFactory factory = new WebSiteFactory();

        

        WebSite fx = factory.getWebSiteCategory("产品展示");

        fx.Use(new User("X"));

        

        WebSite fy = factory.getWebSiteCategory("产品展示");

        fy.Use(new User("Y"));

        

        WebSite fz = factory.getWebSiteCategory("博客");

        fz.Use(new User("Z"));

    }



}

当事物可以分为外部状态和内部状态,而且去除外部状态后,内部状态可以归并为多组的时候,可以使用享元模式。

4.享元模式 和原型模式的区别

享元模式 和原型模式都是复制元素或者内容。

但是原型模式 是复用,也就是实例是多份,但是内容相同。

而享元模式是共用,于单例模式相识。

你可能感兴趣的:(设计模式)