定义与类型
- 提供了减少对象数量从而改善应用所需的对象结构的方式
- 运用共享技术有效的支持大量细粒度的对象
- 类型:结构型
适用场景
- 常常运用于系统底层的开发,以便解决系统的性能问题
- 系统有大量的相似对象,需要缓冲池的场景
优点
- 减少对象的创建,降低内存中的数量,降低系统的内存,提高效率
- 减少内存之外的其他内存的占用
缺点
- 关注内外部状态,关注线程安全问题
- 使系统、程序的逻辑复杂化
coding
package design.structure.flyweight;
public interface Employee {
void report();
}
package design.structure.flyweight;
import java.util.HashMap;
import java.util.Map;
public class EmployeeFactory {
private static final Map<String,Employee> employeMap = new HashMap<String,Employee>();
public static Employee getManager(String department){
Manager manager = (Manager) employeMap.get(department);
if (manager == null){
manager = new Manager(department);
manager.setReportContent(department + "部门汇报:此次报告主要内容是。。。。");
employeMap.put(department,manager);
System.out.println("创建部门经理:" + department);
}
return manager;
}
}
package design.structure.flyweight;
public class Manager implements Employee {
private String dapartment;
private String reportContent;
public Manager(String dapartment) {
this.dapartment = dapartment;
}
public void setReportContent(String reportContent) {
this.reportContent = reportContent;
}
@Override
public void report() {
System.out.println(reportContent);
}
}
package design.structure.flyweight;
public class Test {
private static final String departments[] = {"RD","QA","PM","BD"};
public static void main(String[] args) {
for (int i=0;i<10;i++){
String department = departments[(int) (Math.random() * departments.length)];
Manager manager = (Manager) EmployeeFactory.getManager(department);
manager.report();
}
}
}