设计模式代理模式
- 格式:pdf
- 大小:173.92 KB
- 文档页数:5


软件设计模式及应用软件设计模式是指在软件设计过程中,通过总结和归纳出现的实际问题及解决办法,提炼出的一套经验和规范化的解决方案模板。
设计模式旨在提高代码的可复用性、可扩展性和可维护性,同时也能够提高软件设计的灵活性和可靠性。
常见的软件设计模式包括单例模式、工厂模式、观察者模式、代理模式、装饰器模式等。
下面以几个常见的设计模式为例,介绍其应用场景和具体实现方式。
1. 单例模式:单例模式是一种创建型设计模式,保证一个类只能实例化一个对象,并提供一个全局访问点。
在应用中,当需要一个全局唯一的对象时,可以使用单例模式来保证对象的唯一性。
例如,在某个系统中,需要记录系统日志,并将日志保存到一个文件中。
可以使用单例模式来创建一个全局唯一的日志记录器,以便在各个模块中都可以访问和使用该日志记录器。
单例模式的实现方式有多种,常见的有饿汉式和懒汉式。
饿汉式在类加载时就创建对象,并提供一个静态方法返回该对象;懒汉式在第一次调用时才创建对象,并提供一个静态方法返回该对象。
2. 工厂模式:工厂模式是一种创建型设计模式,将对象的创建和使用分离,通过一个工厂类来创建对象。
工厂模式可以隐藏对象的具体实现,提供一致的接口供调用方使用。
例如,假如有一个图表软件,可以创建不同类型的图表,如饼图、柱状图、折线图等。
可以使用工厂模式来创建图表对象,调用方通过工厂类来创建具体的图表对象,而无需关注图表对象的具体创建过程。
工厂模式可以根据不同的调用需求,提供不同的工厂类。
常见的工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式。
3. 观察者模式:观察者模式是一种行为型设计模式,建立对象之间的一对多关系,当一个对象的状态发生变化时,其他依赖该对象的对象都会收到通知并更新状态。
例如,在一个购物网站中,当用户下单购买商品时,需要通知库存管理系统和订单管理系统等进行相应的处理。
可以使用观察者模式,在用户下单时,通知相关的系统进行处理。
观察者模式由被观察者和观察者组成。
Objective-C设计模式-代理模式(Proxy)代理模式定义 代理模式(Proxy),为其他对象提供⼀种代理,以控制对这个对象的访问。
属于结构型模式,它为⼀个对象提供替代者或占位者,客户端通过代理对象访问⽬标对象,代理对象在客户端和⽬标对象之间起到中介的作⽤。
有以下⼏种代理:1. 远程代理(Remote proxy),为⼀个不同地址空间或⽹络上的对象提供本地代表。
好处是代理对象将⽹络的细节封装起来,客户端不必关⼼⽹络的存在。
2. 虚拟代理(Virtual proxy),根据需要创建重型或开销很⼤的对象。
如果需要创建⼀个资料消耗较⼤的对象,先创建⼀个开销较⼩的对象来占位表⽰,等真正需要时才创建实体对象。
这⾥起到了延迟对象实例化,来减缓对系统资源的消耗的作⽤。
3. 保护代理(protection proxy),通过不同的访问权限控制对原始对象的访问。
4. 智能引⽤代理(Smart reference proxy),当⼀个对象被引⽤时,提供⼀些额外的操作,⽐如将对此对象调⽤的次数记录下来等。
代理模式结构图:代理模式中的⾓⾊都实现的类似相同的接⼝,客户端向Proxy发送request消息时,Proxy持有RealSubject的引⽤,会将消息通过request接⼝转发给RealSubject对象,RealSubject会执⾏实际的操作间接满⾜了客户端的请求。
虚拟代理实现图⽚延时加载 在ios中应⽤开发中,经常需要显⽰⼤量的图像,如定义⼀个允许⽤户浏览相册的需求,视图以列表的形式呈现。
如果将相册中的图⽚全部加载⼜不可⾏,移动设备上的内存很有限,必然会影响性能。
⽽且在图像渲染到屏幕上之前,系统需要进⾏从磁盘上加载图⽚、解压缩等⼀些耗时操作,这些可能会影响视图显⽰的即时性。
通过虚拟代理实现图⽚延时加载可以很好的解决这些问题,实现的⽅式如下图所⽰。
图中ImageLoadProtocol协议表⽰代理模式中的抽象类,并定义了loadImage接⼝,ImageLoader表⽰⽬标对象,⽽ImageViewController既充当代理对象,它也是代理模式中的客户端⾓⾊,本来客户端⾓⾊应该是继承UITableView的⼦类来表⽰,但是这⾥视图不是通过继承,⽽是使⽤ios中的delegate委托模式把处理数据、加载图⽚等这些本属于UITableView的⼯作给它的委托对象ImageViewController来完成,这样ImageViewController也就相当于充当了客户端⾓⾊。
安卓常⽤的6种设计模式总结最近看到两篇博客,觉得很不错,记录⼀下由于项⽬变更的频繁性,作为⼀名程序员,我们需要掌握设计模式的必要性,就不⾔⽽喻~~,下⾯就是⼀些我⾃⼰学习的设计模式总结。
接下来,主要是针对⼏个⽐较常⽤模式进⾏讲解,主要是以下⼏种:观察者模式适配器模式代理模式⼯⼚模式单例模式命令模式1.观察者模式(Observer Pattern)释义:观察者模式定义了⼀种⼀对多的依赖关系,让多个观察者对象同时监听某⼀个主题对象,这个主题对象在状态上发⽣变化时,会通知所有观察者对象,使他们能够⾃动更新⾃⼰。
故事理解:观察者想知道公司所有MM的情况,只要加⼊公司的MM情报邮件组就⾏了,tom负责搜集情报,当发现新情报时,不⽤⼀个⼀个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。
常见实例:1.BaseAdapter.registerDataSetObserver和BaseAdapter.unregisterDataSetObserver两⽅法来向BaseAdater注册、注销⼀个DataSetObserver ; 2.使⽤ContentObserver去监听数据库变化。
适⽤场景:1.当对⼀个对象的改变需要同时改变其他对象,⽽不知道具体有多少对象有待改变;2.当⼀个对象必须通知其它对象,⽽它⼜不能假定其它对象是谁.观察者模式主要有观察者和被观察者2个对象,在该模式中,Observable表⽰被观察者,这个对象是⼀个抽象类,只能被继承。
Observer表⽰观察者,他是⼀个接⼝,所以观察者可以有多个,实现了该接⼝的类都是属于观察者。
这是⽹上⼀个⽣动细致的demo:被观察者:public class MyPerson extends Observable {private int age;private String name;private String sax;public int getAge() {return age;}public void setAge(int age) {this.age = age;setChanged();notifyObservers();}public String getName() {return name;}public void setName(String name) { = name;setChanged();notifyObservers();}public String getSax() {return sax;}public void setSax(String sax) {this.sax = sax;}@Overridepublic String toString() {return "MyPerson [age=" + age + ", name=" + name + ", sax=" + sax + "]";}}MyPerson是被观察者,类中调⽤了setChange()以及notifyObservers()两个⽅法,前者是告知数据改变,后者是发送信号通知观察者。
23种设计模式记忆口诀设计模式是软件开发中常见的解决方案模板,它们能够解决许多常见的设计问题。
为了帮助记忆23种设计模式,可以使用下面这个口诀来记忆:Creational Patterns(创建型模式):1. Singleton(单例模式):一个类能产生一个实例,全局访问。
2. Builder(建造者模式):分步骤创建复杂对象,易拓展。
3. Factory Method(工厂方法模式):子类决定实例化哪个对象。
4. Abstract Factory(抽象工厂模式):创建一组相关对象,不依赖具体类。
5. Prototype(原型模式):通过复制现有对象来创建新对象。
Structural Patterns(结构型模式):6. Adapter(适配器模式):将类的接口转换为客户端希望的接口。
7. Bridge(桥接模式):将抽象部分与实际部分分离。
将对象组合成树形结构来表示部分整体的层次结构。
9. Decorator(装饰器模式):动态地给对象添加功能。
10. Facade(外观模式):提供一个统一的接口,简化客户端使用。
11. Flyweight(享元模式):共享细粒度对象,减少内存使用。
12. Proxy(代理模式):控制对其他对象的访问。
Behavioral Patterns(行为型模式):13. Chain Of Responsibility(责任链模式):将请求的发送者和接收者解耦,多个对象都可能处理请求。
将请求封装成对象,可以用参数化方式处理。
15. Iterator(迭代器模式):提供一种遍历集合的统一接口。
16. Mediator(中介者模式):将多个对象之间的复杂关系解耦。
17. Memento(备忘录模式):将对象的状态保存起来,以后可以恢复。
18. Observer(观察者模式):当一个对象改变状态时,依赖它的对象都会收到通知。
19. State(状态模式):对象的行为随状态的改变而改变。