- 浏览: 25929 次
- 性别:
- 来自: 上海
文章列表
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
机箱上的按钮就相当于命令对象。
机箱相当于Invoker
主板相当于接收者对象,真正实现功能。
命令对象持有一个接收者对象,就相当于给机箱的按钮连上了一个连接线。
当机箱上的按钮被按下时,机箱就把这个命令通过连接线发送出去。
public interface MainBoardApi {
public void open();
}
public class GigaMainBoard implements MainBoardApi {
public void open( ...
定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
public class Subject {// 被观察者
private List<Observer> readers = new ArrayList<Observer>();
public void attach(Observer ...
为其他对象提供一种代理以控罪对这个对象的访问。
代理大致被分为以下几种:
虚代理:根据需要来创建开销很大的对象,该对象只有在需要的时候才会被真正创建。
远程代理:用来在不同的地址空间上代表同一对象,这个不同的地址空间可以是在本机,也可以在其他机器上。java里最典型的就是RMI技术。
copy-on-write代理:在客户端操作的时候,只有对象确实改变了,才会真的拷贝(克隆)一个目标对象,算是虚代理的一个分支。
保护代理:控制对原始对象的访问,如果有需要,可以给不同的用户提供不同的访问权限。
Cache代理:为那些昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
防 ...
工厂方法模式或简单工厂关注的是单个产品对象的创建,比如创建CPU的工厂方法,它就只关心如何创建CPU对象,而创建主板的工厂方法,就只关心如何创建主板对象。
public interface AbstractFactory{
public AbstractProductA createProductA();
...
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
例如导出数据到文本文件和XML文件的步骤都是一样的:文件头,内容,文件尾
public interface Builder {
public void buildPart();
}
public interface Product {
}
public class ConcreteBuilder implements Builder {
private Product resultProduct;
public Product getResult() {
return resultPr ...
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
public interface Prototype {
public Prototype clone();
}
public class ConcretePrototype1 implements Prototype {
public Prototype clone() {
Prototype prototype = new ConcretePrototype1();
return prototype;
}
}
public class ConcretePrototype2 implements ...
用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
public interface Mediator {
public void changed(Colleague colleague);
}
public abstract class Colleague ...
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
工厂方法模式的解决思路就是不解决,采用无为而治的方式。
public class ExportA implements ExportApi {
public boolean export(Strin ...
保证一个类只有一个实例,并提供一个访问它的全局访问点。
懒汉式和饿汉式
懒汉式
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
public ...
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
public interface Target {
public void request();
}
public class Adaptee {
public void existRequest() {
//
}
}
public class Adapter implement Target {
private Adaptee adaptee;
// get方法
// set方法
public void request() {
adap ...
public interface AModuleApi {
public void testA();
}
public class AModuleImpl implements AModuleApi {
public void testA() {
System.out.println("testA");
}
}
public interface BModuleApi {
public void testB();
}
public class BModuleImpl implements BModuleApi {
public void tes ...
接口的思想就是“封装隔离”。接口是系统可插拔性的保证。
1.优先使用接口
2.在既要定义子类的行为,又要为子类提供公共的功能时选择抽象类。
public interface Api {
public void operation(String s);
}
public class ImplA implements Api {
public void operation(String s) {
System.out.println("ImplA" + s);
}
}
...