디자인 모드 - 향원 모드(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'}
    
        }
    }
    

    좋은 웹페이지 즐겨찾기