前言
为什么要学设计模式??工作一年多了,也写了一年多的业务代码,if else 用的炉火纯青,一个 if else 不行就两个 else if 哈哈,然后就变成了一坨。。,这谁顶得住啊,不行,写代码一定要优雅~~,在合适的场景使用合适的设计模式,重用代码、让代码更容易被他人理解、保证代码可靠性。
代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
1、创建一个接口
package com.fengx.design_patterns.proxy_pattern;
/**
* @author: Fengx
* @create: 2021-06-24
* @description: 1、创建一个接口
**/
public interface Image {
void display();
}
2、创建实现接口的实体类
package com.fengx.design_patterns.proxy_pattern;
/**
* @author: Fengx
* @create: 2021-06-24
* @description: 2、创建实现接口的实体类
**/
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
@Override
public void display(){
System.out.println("展示:" + fileName);
}
private void loadFromDisk(String fileName){
System.out.println("第一次从加载对象 " + fileName);
}
}
3、创建Image的代理类
package com.fengx.design_patterns.proxy_pattern;
/**
* @author: Fengx
* @create: 2021-07-05
* @description: 3、创建Image的代理类
**/
public class ProxyImage implements Image{
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName){
this.fileName = fileName;
}
@Override
public void display(){
// 当被请求时,使用 ProxyImage 来获取 RealImage 类的对象
if(realImage == null){
realImage = new RealImage(fileName);
}
realImage.display();
}
}
4、当被请求时,使用 ProxyImage 来获取 RealImage 类的对象
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("fengx.jpg");
// 图像第一次需要从磁盘加载
image.display();
System.out.println("");
// 图像不需要从磁盘加载
image.display();
}
}
输出结果
第一次从加载对象 fengx.jpg
展示:fengx.jpg
展示:fengx.jpg