首页 > 编程语言 >java: Flyweight Patterns

java: Flyweight Patterns

时间:2022-09-18 20:00:05浏览次数:79  
标签:12 java Flyweight 09 orders Patterns 2022 flavor public

 

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 享元模式 Flyweight Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Order.java
 *
 * */


package com.javapatterns.flyweight;

/**
 *抽象对象
 * @author geovindu
 * */
public  abstract  class Order {


    /**
     *将咖啡卖管人
     * */
    public abstract void serve(Table table);
    /**
     *返回咖啡的名字
     * @return
     * */
    public abstract String getFlavor();

}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 享元模式 Flyweight Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Table.java
 *
 * */


package com.javapatterns.flyweight;
/**
 * 
 * @author geovindu 
 * */
public class Table {

    private int number;
    /**
     *
     * */
    public Table(int number)
    {
        this.number = number;
    }
    /**
     *
     * */
    public void setNumber(int number)
    {
        this.number = number;
    }
    /**
     *
     * */
    public int getNumber()
    {
        return number;
    }


}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 享元模式 Flyweight Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Flavor.java
 *
 * */


package com.javapatterns.flyweight;
/**
 *具体对象
 * @author geovindu
 * */
public class Flavor extends Order{

    private String flavor;
    /**
     *构造
     * */
    public Flavor(String flavor)
    {
        this.flavor = flavor;
    }
    /**
     *返回咖啡名称
     * */
    public String getFlavor()
    {
        return this.flavor;
    }
    /**
     *将咖啡卖给客人
     * */
    public void serve(Table table)
    {
        System.out.println("Serving table " + table.getNumber() + " with flavor " + flavor );
    }

}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 享元模式 Flyweight Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc FlavorFactory.java
 *
 * */


package com.javapatterns.flyweight;
/**
 *工厂对象
 * @author geovindu
 *
 * */
public class FlavorFactory {

    private Order[] flavors = new Flavor[10];
    private int ordersMade = 0;
    private int totalFlavors = 0 ;
    /**
     *工厂方法,根据所需的风味提供咖啡
     *
     * */
    public Order getOrder(String flavorToGet)
    {
        if (ordersMade > 0)
        {
            for (int i = 0; i < ordersMade; i++)
            {
                if (flavorToGet.equals((flavors[i]).getFlavor()))
                {
                    return flavors[i];
                }
            }
        }
        flavors[ordersMade] = new Flavor(flavorToGet);
        totalFlavors++;
        return flavors[ordersMade++];
    }
    /**
     *辅助方法,返回创建过的风味对象的个数
     *
     * */
    public int getTotalFlavorsMade()
    {
        return totalFlavors;
    }
}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 享元模式 Flyweight Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc ClientSingleton.java
 *
 * */

package com.javapatterns.flyweight;

import java.util.List;
/**
 *
 * @author geovindu
 *
 * */
public class ClientOrder {

    //the flavors ordered

    /**
     *
     * */
    public ClientOrder()
    {

    }
    /**
     * @label Creates
     */
    private  Order[] flavors = new Flavor[100];

    private int ordersMade = 0;
    private  FlavorFactory flavorFactory;

    /** @link dependency */
    /*#Table lnkTable;*/

    private void takeOrders(String aFlavor)
    {
        flavors[ordersMade++] = flavorFactory.getOrder(aFlavor);
    }

    /**
     *
     * @param orders
     * */
    public void OrderShow(List<String> orders)
    {
        //创建风味咖啡工厂对象
        flavorFactory = new FlavorFactory();
        //创建一个咖啡对象
        orders.forEach(item-> {
                    takeOrders(item);
                });
         //创建所有咖啡对象卖给客人
        for (int i = 0; i < ordersMade; i++)
        {
            flavors[i].serve(new Table(i));
        }
        //风味对象种类数
        System.out.println("\nTotal teaFlavor objects made: " +
           flavorFactory.getTotalFlavorsMade());

    }



}

  

调用测试:

//享元模式
            List<String> orders=new LinkedList<>();
            orders.add("Black Coffee");
            orders.add("Capucino");
            orders.add("Espresso");
            orders.add("Espresso");
            orders.add("Capucino");
            orders.add("Capucino");
            orders.add("Black Coffee");
            orders.add("Espresso");
            orders.add("Capucino");
            orders.add("Black Coffee");
            orders.add("Espresso");
            ClientOrder clientOrder=new ClientOrder();
            clientOrder.OrderShow(orders);

  

输出:

Serving table 0 with flavor Black Coffee
Serving table 1 with flavor Capucino
Serving table 2 with flavor Espresso
Serving table 3 with flavor Espresso
Serving table 4 with flavor Capucino
Serving table 5 with flavor Capucino
Serving table 6 with flavor Black Coffee
Serving table 7 with flavor Espresso
Serving table 8 with flavor Capucino
Serving table 9 with flavor Black Coffee
Serving table 10 with flavor Espresso

Total teaFlavor objects made: 3

  

标签:12,java,Flyweight,09,orders,Patterns,2022,flavor,public
From: https://www.cnblogs.com/geovindu/p/16705588.html

相关文章

  • javascript中的一些细节,undefined和null的区别,什么情况下是false,函数赋值,等等
    如果不赋值,就使用默认值,page=1,size=10如果赋值按位置赋值,如果要跨越位置赋值size,则page定义为undefined则使用的是默认值如下图:javascript什么情况下是false,什么情况......
  • Java8/18
    Java流程控制1.用户交互ScannerScanner是Java5提供的一个工具类(java.until.Scanner),用来获取用户的输入,实现人机交互。基本语法:Scanners=newScanner(System.in);......
  • Java8/18
    Java方法1.方法概念eg:System.out.println();----System是一个系统类,out是System类的一个输出对象,println()就是一个方法什么是方法:Java方法是语句的集合,他们在一起执行......
  • Java static关键字
    在类中,使用static修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。注意:static......
  • JAVA Lambda表达式
    JAVALambda表达式函数式在数学中,函数就是有输入量,输出量的一套计算方案,也就是拿数据做操作面向对象思想强调“必须通过对象形式来做事情”函数式思想则尽量忽略......
  • 电信l1研发工程师 --- java题库
     编程题目1,严格按照题目提示编程。比如定义一个公共类Main和静态方法mainpublicclassMain{ publicstaticvoidmain(String[]args){ //这里开始写程序 }}2.不要带......
  • Java工具类-LocalDate工具类
    背景介绍Java中1.8之前有date类和calendar类。其中date类到了1.8大部分的方法被弃用了说明这些方法都有很大的缺陷,而且date类如果不格式化可读性十分差,所以就需要格式......
  • java进程占用swap分区问题,导致swap分区快速增满不够用!!
     foriin$(cd/proc;ls|grep"^[0-9]"|awk'$0>100');doawk'/Swap:/{a=a+$2}END{print'"$i"',a/1024"M"}'/proc/$i/smaps2>/dev/null;done|sort-k2nr|......
  • Csharp: Singleton Patterns
     ///<summary>///SummarydescriptionforSpooler.///geovindu,GeovinDu,涂聚文///单例模式(SingletonPatterns)///</summary>pu......
  • 解决 java.lang.IllegalStateException: Failed to load ApplicationContext
    问题:Causedby:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'sensitiveFilter':Invocationofinitmethodfailed;nes......