外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用
使用外观模式的目的就是让我们使用更加简单(脑残)。记得我在一篇讲Netty编解码的时候讲到过Facebook提供的构建在Netty与Thrift之上的封装nifty: https://github.com/facebook/nifty。我确信无疑,里面使用了外观模式。(外观模式,也不想讲。当你遇到某些客户时,你会考虑使用它的)
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,实现对象的共享,以减少内存占用和提高性能。
享元对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State)。
常见的连接池,String都使用了享元模式。
第一次听说享元模式时,别人举得是围棋的例子。从色彩上来看,围棋只有两种颜色,而围棋的落子却有不同的组合。所以我们将公有属性定义为Key,放在一个HashMap里面。
public class Circle{
private String color;
private int x;
private int y;
private int radius;
public Circle(String color) {
this.color = color;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setRadius(int radius) {
this.radius = radius;
}
public void draw() {
System.out.println("Circle: Draw() [Color : " + color
+ ", x : " + x + ", y :" + y + ", radius :" + radius);
}
}public class ShapeFactory {
private static final HashMap<String, Circle> circleMap = new HashMap();
public static Circle getCircle(String color) {
Circle circle = circleMap.get(color);
if (circle == null) {
circle = new Circle(color);
circleMap.put(color, circle);
System.out.println("Creating circle of color : " + color);
}
return circle;
}
}public class FlyweightPatternDemo {
private static final String colors[] =
{"Red", "Green", "Blue", "White", "Black"};
public static void main(String[] args) {
for (int i = 0; i < 20; ++i) {
Circle circle = ShapeFactory.getCircle(getRandomColor());
circle.setX(getRandomX());
circle.setY(getRandomY());
circle.setRadius(100);
circle.draw();
}
}
private static String getRandomColor() {
return colors[(int) (Math.random() * colors.length)];
}
private static int getRandomX() {
return (int) (Math.random() * 100);
}
private static int getRandomY() {
return (int) (Math.random() * 100);
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33899-10.html
三大无才
芝麻有虫子不好吗