디자인 모드 - 향원 모드(12)
22276 단어 디자인 모델
간단한 소개
공유 기술을 활용하여 대상의 복용을 실현하고 같은 방법으로 대상을 대량으로 집행하지 않으며 시스템 비용을 줄이고 장면, 캐시를 활용하여 수정되지 않는 대상을 얻는다. 먼저 캐시에서 얻고 있으면 바로 얻는다. 없으면 캐시 Pool을 만들고 넣는 사용. 스레드 탱크든 연결 탱크든 일정한 연결 수를 얻고 캐시 구역에 놓고 외부에서 호출하며 반복적으로 만들지 않는다.
예.
public class Person {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
캐시 공장
public class DataFactory {
private Map<String, Object> map = new HashMap<>();
public Object getBySql(String sql){
// ,
// , DB
Object o = this.map.get(sql);
if (o == null) {
System.out.println("select from db");
//
o = new Person();
((Person) o).setId("11");
((Person) o).setName("name1");
this.map.put(sql, o);
}else {
System.out.println("select from map");
}
return o;
}
}
테스트
public class Main {
public static void main(String[] args) {
DataFactory factory = new DataFactory();
Object o1 = factory.getBySql("select * from person where id = 11");
System.out.println(o1);
Object o2 = factory.getBySql("select * from person where id = 11");
System.out.println(o2);
Object o3 = factory.getBySql("select * from person where id = 11");
System.out.println(o3);
// select from db
// Person{id='11', name='name1'}
// select from map
// Person{id='11', name='name1'}
// select from map
// Person{id='11', name='name1'}
}
}
public class Connection {
private String name;
public Connection(String name) {
this.name = name;
}
@Override
public String toString() {
return "Connection{" +
"name='" + name + '\'' +
'}';
}
}
연못
public class DataPool {
private List<Connection> resources = new ArrayList<>();
public DataPool(int size) {
for (int i = 1; i <= size; i ++) {
//
this.resources.add(new Connection(i + ""));
}
}
//
public synchronized Connection getConnection () {
if (this.resources.size() > 0) {
Connection connection = this.resources.get(0);
this.resources.remove(connection);
return connection;
}else {
//
throw new RuntimeException(" ");
}
}
// ,
public void release(Connection connection ){
this.resources.add(connection);
}
}
테스트
public class MainDataPool {
public static void main(String[] args) {
DataPool pool = new DataPool(3);
Connection c1 = pool.getConnection();
System.out.println(c1);
Connection c2 = pool.getConnection();
System.out.println(c2);
Connection c3 = pool.getConnection();
System.out.println(c3);
try{
pool.getConnection();
}catch (Exception e){
System.out.println(e.getMessage());
}
// c2
pool.release(c2);
//
Connection c4 = pool.getConnection();
System.out.println(c4);
// Connection{name='1'}
// Connection{name='2'}
// Connection{name='3'}
//
// Connection{name='2'}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간편한 Java 브리지 모드정의: 추상적인 부분과 실현된 부분을 분리하여 그것들이 모두 독립적으로 변화할 수 있도록 한다. 특징: 브리지 모델은 클래스의 최소 디자인 원칙을 바탕으로 봉인, 집합 및 계승 등 행위를 통해 서로 다른 클래스가 서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.