设计模式的读书笔记

Singleton(单例)模式

确保某个类只有一个实例,并且为之提供一个全局访问点。

 

Observer(观察者)模式

在多个对象之间定义一个一对多的关系,以便当一个对象状态改变时,其他依赖于这个对象的对象都能得到通知,并自动更新。

 

Mediator(中介者)模式

定义一个对象,该对象将对象集合之间的交换封装起来。我的理解:就是一个关系类。一般用hashmap或hashtable来维护。多的一方做主键。

 

Proxy(代理)模式

为对象提供一个代理或者占位(placeholder)来控制对该对象的访问。
使用一个单独的线程可以保证在加载图像的时候应用程序不会被挂起。
使用Proxy模式,可以直接调用位于本地的代理对象的方法,该代理对象将调用请求发给远程对象。CORBA,RMI都实现了这种方案。

 

Chain of Responsibility(责任链)模式

让每个对象都有一次机会决定自己是否处理请求,以便于避免请求的发送者和其接收者之间的耦合。

 

Flyweight(享元)模式

通过共享来支持大量的细粒度对象的使用效率。
String 是Java中的不变对象,采用的是享元模式。
一般是用一个factory中维护一个map,将不可变的属性作为主键。或在类中预先定义一堆常量。如BorderFactory

 

Builder(生成器)模式

意图是把构造对象实例的代码逻辑移到实例化的类的外部。
String simple = “input text”;
ReservationBuilder builder = new Builder();
New ReservationParse(builder).parse(simple);
Reservation res = builder.build();

 

Factory Method(工厂方法)模式
意图是用于创建对象的接口,同时控制对哪个类进行实例化。

 

Abstract Factory(抽象工厂)模式
意图是创建一系列相互关联或相互依赖的对象。

 

Prototype(原型)模式
不是通过实例化一个新的未初始化的实例,而是通过复制一个现有的对象来生成新的对象。
clone()方法功能:新对象,相同的字段。Clone()方法创建一个新的对象,这个对象和原对象类型相同,属性相同。赋值基本类型的字段,不复制引用类型的字段。即复制后的对象和原对象的一个对象类型的属性是指向同一个,修改一个会影响另一个。Clone()方法创建的对象是浅复制(shallow copy),与原对象共享任何下级对象。如果希望使用深复制(deep clone),必须自己实现自己期望的内容复制。

 

Memento(备忘)模式
为对象提供状态存储和状态恢复功能。
用栈来存储备忘
会话:当用户运行一个程序,执行程序中的事务,最后退出。这个过程被称为一次会话。

 

Template Method(模版)方法
在一个方法中实现一个算法,并将算法中的某些步骤的定义推迟,从而使其他类可要定义这些步骤。
Template Method模式钩子: 钩子(hook)就是一个方法调用。开发人员将它放到自己代码中的特定位置,其他开发人员就可要在该位置插入他们自己的代码。

 

State(状态)模式
将与状态有关的处理逻辑分散到代表对象状态的各个类中

 

Strategy(策略)模式
将可选的策略或方案封装在不同的类中,并在这些类中实现一个共同的操作。

 

Command(命令)模式
将请求封装在对象中。

 

Interpreter(解释器)模式
按照自己定义的组合规则集合来组合可执行的对象。 Composite模式+command模式

 

Writes text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings.
The buffer size may be specified, or the default size may be accepted. The default is large enough for most purposes.
A newLine() method is provided, which uses the platform's own notion of line separator as defined by the system property line.separator. Not all platforms use the newline character ('/n') to terminate lines. Calling this method to terminate each output line is therefore preferred to writing a newline character directly.
In general, a Writer sends its output immediately to the underlying character or byte stream. Unless prompt output is required, it is advisable to wrap a BufferedWriter around any Writer whose write() operations may be costly, such as FileWriters and OutputStreamWriters. For example,
 PrintWriter out
   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
 
will buffer the PrintWriter's output to the file. Without buffering, each invocation of a print() method would cause characters to be converted into bytes that would then be written immediately to the file, which can be very inefficient.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值