首页 > 代码库 > 设计模式随笔

设计模式随笔

原文:http://blog.csdn.net/chmask/article/details/2631485

1.工厂模式(Factory Method):子类只能是平级关系,如父类是动物,子类是猫和狗

2.抽象工厂模式(Abstract Factory):子类之间也能是包含关系,如:父类是组件,子类可以是列表和文本,其中列表中能包含文本

3.单例模式(Singleton):使类不能直接new出来,而要通过newInstance获取,而且一个类只能有一个实例.单例分懒汉式和饿汉式,前者是调用newInstance时已经生成实例,  后者则是如果调用时没生成实例,返回一个新实例

4.建造模式(Builder):建造过程由builder(工人)参与,而调用时通过Director(主管)调用工人来完成

5.原型模式(ProtoType):通过实现Clonable接口,调用clone()方法来实现细节,也分浅拷内(只拷贝简单属性的值和对象属性的地址)和深拷内(拷贝本对象引用的对象,有可能会出现循环引用的情况)

import java.io.*;public class TestClonealbe {public static void main(String[] args) throws Exception {Father f=new Father();User u1=new User("123456",f);User u2=(User)u1.clone();System.out.println(u1==u2);System.out.println(u1.f==u2.f);}}class User implements Cloneable,Serializable{String password;Father f;public User(String password,Father f){this.password=password;this.f=f;}public Object clone() throws CloneNotSupportedException {//return super.clone();ObjectOutputStream out=null;ObjectInputStream in=null;try {ByteArrayOutputStream bo=new ByteArrayOutputStream();out = new ObjectOutputStream(bo);out.writeObject(this);out.flush();byte[] bs=bo.toByteArray();ByteArrayInputStream bi=new ByteArrayInputStream(bs);in = new ObjectInputStream(bi);Object o=in.readObject();return o;} catch (IOException e) {e.printStackTrace();return null;} catch (ClassNotFoundException e) {e.printStackTrace();return null;}finally{try {out.close();in.close();} catch (IOException e) {e.printStackTrace();}}}}class Father implements Serializable{}
View Code

6.适配器模式(Adapter):把一个接口转换成另一个接口,类似于鼠标通过adapter把usb接口转换成ps2接口

7.组合模式(Composite) 把整体和局部的关系用树状结构描述出来,使得客户端把整体对象和局部对象同等看待。类就是典型的组合模式,它是属性,方法和构造器的组合.

8.装饰模式(Decorator) 以对客户透明的方式来扩展对象的功能。 用户根据功能需求随意选取组成对象的成分,通过方法的链式调用来实现。 可以给对象动态的增加功能,比继承灵活性更大。类似类构造器

9.代理模式(Proxy) 用一个代理对象来作为另一个对象的代理,对客户来说是透明的。 存在一个抽象主题类,具体主题类和代理主题类都继承(实现)抽象主题,代理主题类中的方法会调用具体主题类中相对应的方法。验证就是典型的代理模式,所有不合法的数据全部由系统代为处理.

10.享元模式(Flyweight Pattern) 对象的状态分为内蕴状态和外蕴状态。内蕴状态不随环境变化而变化,因此可以作成系统共享. 如:"尊敬的XXX,你好"就能用享元,其中XXX以外的部分为内蕴状态

11.门面模式(Facade):外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用 。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。即门面操作类似window系统,作用是通过简单操作实现复杂效果

12.桥梁模式(Bridge) 将抽象和实现脱耦,使得二者可以单独变化。使得一个继承关系不承担两个变化因素.使用合成来代替继承的一种体现.如:hibernate中DAO层

15.观察者模式(Observer) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。观察者和被观察者的分开,为模块划分提供了清晰的界限。在低耦合的对象间完成协调。典型如:天气预报,当天气有变化时通知相关人员.

16.迭代器模式(Iterator) 类似于集合中的Iterator,使用迭代器来统一不同集合对象的遍历方式。如:XXX的父亲叫什么(继续下去)

17.责任链(Chain of Responsibility) 多个处理器对象连成一串,请求在这条链上传递,由该处理这个请求的处理器来处理。发出请求的客户端并不知道哪个对象处理请求。(典型的就是try catch模式)

18.调停者模式(MEDIATOR):调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。如:支付宝担保系统

(后面几个没学会怎么用,有空再学习吧)