还有几个设计模式就不写了…记录一些参考的博文QAQ
Bridge Pattern
优点
1/解耦实现,因此它不会永久绑定到不变的接口
2/抽象和实现可以独立扩展
3/对具体抽象类的更改不会影响客户端
用途
1/适用于需要在多个平台上运行的图形和窗口系统
2/当您需要以不同方式改变界面和实现时,这些都是有用的
缺点
1/增加复杂性
具体参考这篇博文和这篇博文 favor composition over inheritance
Flyweight Pattern
public class Test extends JFrame {
//...
public Test() {
//...
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Graphics g = panel.getGraphics();
for(int i=0; i < NUMBER_OF_LINES; ++i) {
Line line = LineFactory.getLine(getRandomColor());
line.draw(g, getRandomX(), getRandomY(),
getRandomX(), getRandomY());
}
}
});
}
//...
}
public class LineFactory {
private static final HashMap linesByColor = new HashMap();
public static Line getLine(Color color) {
Line line = (Line)linesByColor.get(color);
if(line == null) {
line = new Line(color);
linesByColor.put(color, line);
System.out.println("Creating " + color + " line");
}
return line;
}
}
public class Line {
private Color color;
public Line(Color color) {
this.color = color;
}
public void draw(Graphics g, int x, int y, int x2, int y2) {
g.setColor(color);
g.drawLine(x, y, x2, y2);
}
}