加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

第26章《享元模式》

发布时间:2020-12-13 20:56:30 所属栏目:百科 来源:网络整理
导读:h2 id="1定义"1.定义 享元模式就是:运用共享技术有效地支持大量细粒度的对象。 h2 id="2适用场景"2.适用场景 如果一个程序使用了大量的对象,而大量的这些对象造成了很大的开销时就应该考虑使用。 对象的大多数状态是外部状态,如果删除对象的外部状态,就

<h2 id="1定义">1.定义

享元模式就是:运用共享技术有效地支持大量细粒度的对象。

<h2 id="2适用场景">2.适用场景

  • 如果一个程序使用了大量的对象,而大量的这些对象造成了很大的开销时就应该考虑使用。
  • 对象的大多数状态是外部状态,如果删除对象的外部状态,就可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。
  • 享元模式通常用于底层设计。

这里写图片描述

<h2 id="4劣势">4.劣势

  • 使用享元模式需要维护一个记录了系统已有的所有享元的列表。
  • 享元模式使得系统更加复杂。
  • 为了使得对象可以共享,需要将一些状态外部化,这使得程序的逻辑复杂化。

  • 场景:根据用户登录网站的类型,创建网站实例,从而同一类型的网站只存在一个实例。
  • UML图:

    这里写图片描述

  • 代码结构图:

    这里写图片描述

  • 代码: code1

    package designmodel.chapter26;    
    /**
    * @Author: cxh
    * @CreateTime: 18/2/21 11:52
    * @ProjectName: JavaBaseTest
    */
    public class ConcreteWebSite extends WebSite {
        public ConcreteWebSite(String webType) {
            super.webType = webType;
        }
    
    @Override
    public void display(User user) {
        System.out.println("网站分类:"+super.webType+" &amp;&amp; 登陆用户为:"+user.getName());
    }

    }

    code2

     package designmodel.chapter26;
    

    /**

    • @Author: cxh

    • @CreateTime: 18/2/21 12:09

    • @ProjectName: JavaBaseTest
      */
      public class Main {
      public static void main(String[] args) {
      WebSiteFactory factory=new WebSiteFactory();
      ConcreteWebSite web1=factory.getWebSite("产品展示");
      web1.display(new User("李丽"));

      ConcreteWebSite web2=factory.getWebSite("合作商家");
      web2.display(new User("周青"));
      
      ConcreteWebSite web3=factory.getWebSite("经销商信息");
      web3.display(new User("黎洲"));
      
      ConcreteWebSite web4=factory.getWebSite("合作商家");
      web4.display(new User("李丽莉"));

      }
      }

code3

package designmodel.chapter26;

/**

  • @Author: cxh

  • @CreateTime: 18/2/21 11:45

  • @ProjectName: JavaBaseTest
    */
    public class User {
    private String name;

    public User(String name) {
    this.name = name;
    }

    public String getName() {
    return name;
    }
    }

code4

package designmodel.chapter26;

/**

  • @Author: cxh
  • @CreateTime: 18/2/21 11:51
  • @ProjectName: JavaBaseTest
    */
    public abstract class WebSite {
    String webType;
    public abstract void display(User user);
    }

code5

package designmodel.chapter26;

import java.util.HashMap;

/**

  • @Author: cxh
  • @CreateTime: 18/2/21 12:01
  • @ProjectName: JavaBaseTest
    */
    public class WebSiteFactory {
    private HashMap<String,ConcreteWebSite> map=new HashMap<>();
    public ConcreteWebSite getWebSite(String type){
    if(!map.containsKey(type)){
    map.put(type,new ConcreteWebSite(type));
    }
    //输出当前网站类型的实例个数
    System.out.println("当前map大小:"+map.size());
    return map.get(type);
    }
    }

参考书籍:《大话设计模式》-程杰

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读