> For the complete documentation index, see [llms.txt](https://javascript-1.gitbook.io/design-pattern/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://javascript-1.gitbook.io/design-pattern/structural-design-patterns/proxy.md).

# Proxy

An object representing another object.

* Proxy provides a surrogate or placeholder for another object to control access to it.
* Proxy means 'in place of' or 'representing' or 'on behalf of'.
* The proxy is the object that is being called by the client to access the real object behind the scene.
* In this pattern, a class represents functionality of another class.
* Most frequently used in JavaScript.

```javascript
EX:
function GeoCoder() {
 
    this.getLatLng = function(address) {
        
        if (address === "Amsterdam") {
            return "52.3700° N, 4.8900° E";
        } else if (address === "London") {
            return "51.5171° N, 0.1062° W";
        } else if (address === "Paris") {
            return "48.8742° N, 2.3470° E";
        } else if (address === "Berlin") {
            return "52.5233° N, 13.4127° E";
        } else {
            return "";
        }
    };
}
 
function GeoProxy() {
    var geocoder = new GeoCoder();
    var geocache = {}; 
    return {
        getLatLng: function(address) {
            if (!geocache[address]) {
                geocache[address] = geocoder.getLatLng(address);
            }
            return geocache[address];
        },
        getCount: function() {
            var count = 0;
            for (var code in geocache) { count++; }
            return count;
        }
    };
};

var geo = new GeoProxy();
 
    // geolocation requests 
    geo.getLatLng("Paris");
    geo.getLatLng("London");
    geo.getLatLng("London");
    geo.getLatLng("London");
    geo.getLatLng("London");
    geo.getLatLng("Amsterdam");
    geo.getLatLng("Amsterdam");
    geo.getLatLng("Amsterdam");
    geo.getLatLng("Amsterdam");
    geo.getLatLng("London");
    geo.getLatLng("London"); 
    console.log("\nCache size: " + geo.getCount());
```

**Real time Ex:**

![Real time Example for Proxy Pattern](https://1698315463-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LiuzoHqHr4MUK1nJBO8%2F-LpqYCj3kE6WakwkQNsT%2F-LpqaD461ebai97Du8pq%2Fimage.png?alt=media\&token=c8a19c89-0962-4ab7-b9ca-92c70cc19136)
