美文网首页
26.享元模式

26.享元模式

作者: 测试员 | 来源:发表于2020-01-06 22:19 被阅读0次

需求

小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:
1)有客户要求以新闻的形式发布
2)有客户人要求以博客的形式发布
3)有客户希望以微信公众号的形式发布

UML

享元模式UML

类结构

享元抽象类: 定义享元对象 和 主要功能

享元实现类: 实现抽象功能

Web工厂类: 单例生产共享部分

User类: 用户【本案例中没什么用 就是非用用部分】

测试类: 调用方法 测试功能

代码实现

测试类

package com.yuan.dp.flyweighty;

public class FlyweihtyTest {
    public static void main(String[] args) {
        Web工厂类 webFactory = new Web工厂类();
        享元实现类 fly_1 = webFactory.getFlyweihty("微博",new User("小明1"));
        享元实现类 fly_4 = webFactory.getFlyweihty("微博",new User("小明2"));
        享元实现类 fly_2 = webFactory.getFlyweihty("网页",new User("小红1"));
        享元实现类 fly_5 = webFactory.getFlyweihty("网页",new User("小红2"));
        享元实现类 fly_3 = webFactory.getFlyweihty("视频",new User("小贺1"));
        享元实现类 fly_6 = webFactory.getFlyweihty("视频",new User("小贺2"));

        fly_1.use();
        fly_2.use();
        fly_3.use();
        fly_4.use();
        fly_5.use();
        fly_6.use();
        webFactory.getSize();
    }
}

/*
新闻类型是......微博       用户类型是....小明1
新闻类型是......网页       用户类型是....小红1
新闻类型是......视频       用户类型是....小贺1
新闻类型是......微博       用户类型是....小明1
新闻类型是......网页       用户类型是....小红1
新闻类型是......视频       用户类型是....小贺1
池中一共3个对象
*/

实现部分代码

package com.yuan.dp.flyweighty;

import java.util.HashMap;

public abstract class 享元抽象类 {
    abstract void use();
}




class 享元实现类 extends 享元抽象类{
    /**
     * 网站类型
     */
    private String type;
    private  User user;

    public 享元实现类(String type,User user) {
        this.type = type;
        this.user = user;
    }

    @Override
    void use(){
        System.out.println("新闻类型是......" + type  + "       用户类型是...." + user.getName());
    }
}

class Web工厂类{
    /**
     * Web池
     */
    HashMap<String,享元实现类> webPool = new HashMap();

    /**
     * 获得一个网站类型
     * @param type 网站类型
     * @return 网站类型
     */
    public 享元实现类 getFlyweihty(String type ,User user){

        //如果没有就往池中放一个
        if (!webPool.containsKey(type)){
            webPool.put(type,new 享元实现类(type,user ));
        }
        return webPool.get(type);
    }

    /**
     *
     * @return
     */
    void getSize(){
        System.out.println("池中一共"+webPool.size()+"个对象");
    }
}
class User{
    /**
     * 用户姓名
     */
    private String name;

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

    /**
     * 获取用户姓名
     * @return 用户姓名
     */
    public String getName() {
        return name;
    }
}

享元模式介绍

抽象享元角色:定义享元类。

具体享元角色:实现了享元角色的必要方法。

享元工厂方法:负责创建管理享元角色。

平常不经意就会用到,实际学了也没啥效果........

相关文章

  • 26.享元模式

    需求 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都...

  • 设计模式之享元模式(flyweight模式)

    引入享元模式 享元模式的实例 享元模式的分析 引入享元模式 flyweight是轻量级的意思,指的是拳击比赛中选手...

  • 第4章 结构型模式-享元模式

    一、享元模式的简介 二、享元模式的优缺点 三、享元模式的实例

  • 享元模式

    一、享元模式介绍 二、享元模式代码实例

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

  • 设计模式之——享元模式

    1 享元模式的定义 享元模式:使用共享对象可有效地支持大量细粒度的对象。享元模式是池技术的重要实现方式。享元模式的...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • Java设计模式(三)

    talk is cheap show me the code 享元模式 享元模式 责任链模式 责任链模式Filte...

网友评论

      本文标题:26.享元模式

      本文链接:https://www.haomeiwen.com/subject/zetcactx.html