首页 > 代码库 > 设计模式:享元模式
设计模式:享元模式
原文地址:http://leihuang.org/2014/12/09/flyweight/
Structural 模式 如何设计物件之间的静态结构,如何完成物件之间的继承、实 现与依赖关系,这关乎着系统设计出来是否健壮(robust):像是易懂、易维护、易修改、耦合度低等等议题。Structural 模式正如其名,其分类下的模式给出了在不同场合下所适用的各种物件关系结构。
- Default Adapter 模式
- Adapter 模式
- Bridge 模式
- Composite 模式
- Decorator 模式
- Facade 模式
- Flyweight 模式
- Proxy 模式
享元模式用于降低对象的创建数量,提升程序性能.java中String就是利用了享元模式,就是如果对象内容相同时就不创建新的对象,如果不存在与之相同内容的对象时,才创建一个新的对象.
String str1 = "abc" ;
String str2 = "abc" ;
System.out.println(str1==str2) ;
上面这段代码输出true,因为String就是利用了享元模式.
下面我们来实现一个享元模式,一个形状接口Shape,长方形Rectangle实现Shape接口,我们让客户端创造不同颜色的长方形,相同颜色的记为内容相同.类结构图如下:
Shape 接口
public interface Shape { public void draw() ; }
Rectangle 类
public class Rectangle implements Shape { private int width, height; private String color; public Rectangle(String color) { this.color = color; } public void setWidth(int width) { this.width = width; } public void setHeight(int height) { this.height = height; } @Override public void draw() { System.out.println("width:" + width + " height:" + height + " color:" + color); } }
ShapeFactory 类
public class ShapeFactory { private static HashMap<String,Shape> hs = new HashMap<String,Shape>() ; public static Shape getShape(String color){ Shape shape = hs.get(color); if(shape==null){ shape = new Rectangle(color) ; hs.put(color, shape) ; } return shape; } public static int size(){ return hs.size() ; } }
Client 类
public class Client { private static String[] colors = { "red", "blue", "yellow", "green", "black" }; public static void main(String[] args) { Rectangle rectangle = null ; for (int i=0;i<20;i++) { rectangle = (Rectangle) ShapeFactory.getShape(getRandomColor()); rectangle.setHeight(i); rectangle.setWidth(i); rectangle.draw(); } System.out.println(ShapeFactory.size()) ; //always 5 } private static String getRandomColor() { return colors[(int) (Math.random() * colors.length)]; } }
设计模式:享元模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。