首页 > 编程知识 正文

享设计靠谱吗,图解java多线程设计模式 pdf

时间:2023-05-06 04:40:58 阅读:167580 作者:198

Flyweight模式(享元)

如果将Java追溯到一定程度,就不可避免地会碰到设计模式这个概念。 了解设计模式将有助于更好地了解接口和抽象系统在Java中的应用。 设计模式在Java的中型系统中广泛使用,遵循一定的编程模式可以使自己的代码更容易理解和交流。 Flyweight (是常用的模式。

Flyweight模式是提高程序效率和性能的模式,大幅提高程序的执行速度。 应用场合多为:例如从一个数据库中读取一系列字符串。 由于其中许多字符串是重复的,因此可以将这些字符串保存到Flyweight池(pool )中。

定义:避免大量具有相同内容的小类开销(如内存消耗),允许大家共享一个类(元类)。

作为本来目的的:面向对象语言,原则上全部是对象,但在实际使用中,对象数量可能会变得巨大。 例如,文字处理软件,将每个文字作为1个对象的情况下,数千个文字,对象数为数千,无疑会消耗内存。 如果是这样,仍然需要通过“求同存异”,找出这些对象群的共同点,设计元类,封装可以共享的类。 另外

这里以咖啡外卖店为例

编写了四个java类来说明如何实现Flyweight设计模式;

客人买咖啡点。 订单只区分咖啡的味道。 如果有1W个订单,咖啡店只卖20种口味的咖啡,我们就没有必要生成1W个订单对象。 在机会模式下只需生成20个订单对象。

这个例子列举得不多,但足以说明问题。 下面是具体的代码。

1、

Order.java订单抽象类

2、

FlavorOrder.java订单实现类

3、

FlavorFactory.java订单生成工厂

4、

Client.java客户类,具有main方法的测试类

=================1,

Order.java

打包流量;

公共类订单{

//执行销售动作

public abstract void sell (;

//获得咖啡的味道

公共字符串获取标志(;

}

===================1end

=================2、

FlavorOrder.java

打包流量;

publicclassflavororderextendsorder { privatestring flavor;

publicflavororder(stringflavor ) {

this.flavor=flavor;

}

公共字符串获取标志

return this.flavor;

}

公共void sell () {

System.out.println ('卖一杯[' flavor ']。' );

}

}

==================2end

==================3、

FlavorFactory.java

打包流量;

import java.util.HashMap;

import java.util.Map;

公共类flavor factory {

//订单池

私有

Map flavorPool=new

Hashmap(20;

//静态工厂,负责订单对象的生成

privatestaticflavorfactoryflavorfactory=new

FlavorFactory (;

私有标志工厂

publicstaticflavorfactorygetinstance (

{

返回

flavorFactory;

}

//接受订货

公共文件夹(string flavor )。

订单订单

=空;

flavor pool.contains key (flavor ) ) )。

order=flavorpool.get(flavor );

}else{

//收到新口味的订单

order=newflavororder(flavor;

//放入对象池

flavorpool.put(flavor,

订单; }

返回

订单;

}

//获得已经出售的咖啡的全部味道数

public int getTotalFlavorsMade (

返回

flavorPool.size (;

}

}

===================3end

=================4,

Client.java

打包流量;

import java.util.ArrayList;

import java.util.List;

公共类客户端{

//客户订单

私有静态

List orders=new

Arraylist(100;

//订购对象生成工厂

privatestaticflavorfactoryflavorfactory;

//增加订单

私有状态声明(字符串标志)。

{

orders.add (flavor factory.get order ) flavor );

}

publicstaticvoidmain (string [ ] args ) )。

{

//订单生成工厂

flavor factory=flavor factory.getinstance (;

//增加订单

takeOrders (摩卡);

takeOrders ('卡布奇诺);

takeOrders ('香草明星冰音乐);

takeOrders ('香草明星冰音乐);

拿铁(拿铁);

takeOrders ('卡布奇诺);

拿铁(拿铁);

takeOrders ('卡布奇诺);

takeOrders (摩卡);

takeOrders ('香草明星冰音乐);

takeOrders ('卡布奇诺);

takeOrders (摩卡);

takeOrders ('香草明星冰音乐);

拿铁(拿铁);

拿铁(拿铁);

//卖咖啡

订单

订单:订单) {

order.sell (;

}

//打印生成的订单java对象的数量

system.out.println(n客户一共购买了orders.size ) )。

“来杯咖啡! " );

//打印生成的订单java对象的数量

现在有system.out.println(n共生是“flavor factory.gettotalflavorsmade”)个FlavorOrder java对象!

();

}

}

===================4end

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。