IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android设计模式—代理模式 -> 正文阅读

[移动开发]Android设计模式—代理模式

代理模式也是平时比较常用的设计模式之一。所谓代理模式就是在进行交互的时候,不和原本的对象直接交互,而是通过代理的方式,用代理来代替真正的对象进行交互,这样做的好处是降低了耦合性。
代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身。在日常生活中也是很常见的。例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日常生活中代理模式的应用。平时打开网页,最先开到的一般都是文字,而图片等一些大的资源都会延迟加载,这里也是使用了代理模式。

代理模式经常使用方式大约有三种:
1、普通代理
所谓普通代理,就是创建一个和真实对象相同的类,将真实的对象当作参数传入到代理中,当外界通过代理进行操作的时候,代理中的真实对象也会进行相应的操作。
步骤很简单:
①创建接口,定义共同方法。
②创建真实类,实现接口
③创建代理类,实现接口,但是增加一步,在构造方法中将真实对象的引用当作参数,拿到真实对象。
④得到代理对象,通过对代理对象操作,实现对真实对象的相应操作
举例如下:
//定义接口
public interface IHouse {
void getHouseInfo();
void signContract();
void payFees();
}

//接下来定义真实主题,并实现IHouse接口。
增加房屋名称和价格两个属性,填充接口方法,在获取房屋信息的时候就把房屋名称和价格log出来;签合同的时候log出签合同的时间,付租金的时候log出价格。
public class House implements IHouse{
private String name;
private double price;

public House(String name, double price){
this.name = name;
this.price = price;
}

@Override
public void getHouseInfo() {
Log.i(TAG, “House Info- name:” + name + " ¥:" + price);
}

@Override
public void signContract() {
Log.i(TAG, “Contract:” + name + " signed at" + new SimpleDateFormat(“HH:mm:ss”).format(SystemClock.uptimeMillis()));
}

@Override
public void payFees() {
Log.i(TAG, “Bill: name-” + name + " $-" + price);
}
}

//定义房屋代理,同样需要实现IHouse接口,并持有House的引用。
可以看到代理类其实就像又封装了House,提供了一些附加操作,例如客户要看房子的时候代理会先检索自己库存的房屋信息,签合同之前要准备合同之类的。
public class ProxyHouse implements IHouse{
private IHouse house;
public ProxyHouse(IHouse house){
this.house = house;
}
@Override
public void getHouseInfo() {
Log.i(TAG, “searching”);
house.getHouseInfo();
Log.i(TAG, “search finished”);
}

@Override
public void signContract() {
Log.i(TAG, “prepare contract”);
house.signContract();
}

@Override
public void payFees() {
house.payFees();
}
}

对于客户来说,完全不用跟House进行直接交互,这里先定义一个房子叫唐顿庄园,租金5k,建立一个房屋代理,把唐顿庄园委托给代理.客户要找房子,签合同,付租金直接找代理就行了.
IHouse house = new House(“Downton Abbey”, 5000);
IHouse proxyHouse = new ProxyHouse(house);
Log.i(TAG, “looking for a perfect house”);
proxyHouse.getHouseInfo();
Log.i(TAG, “thinking”);
proxyHouse.signContract();
proxyHouse.payFees();
Log.i(TAG, “so easy”);

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:54:36  更:2021-10-08 11:54:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:29:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码