设计模式说到底就是各种接口编程和父类对象指向子类引用
代理(proxy)模式
为什么要使用代理模式:对一些类中的方法进行某些操作,比方说计算方法的运行时间等等哪种代理方式更好,1.继承方式 2.实现同一接口:2比1要好很多,更加灵活,例如计算时间的代理和记录log的代理同时使用,可以任意顺序调用,1的实现方式就要写死在代理中,比较不方便
写死代理类也会引起类太多的问题,所以静态代理就被动态代理所取代,动态代理就相当于代理的总代理,由它生成具体的代理类,但是必须要传入所要代理的类实现的接口interface和代理类要进行的处理handler
把要代理的类传给handler,从而实现了对这个类进行了指定的代理
工厂(factory)模式
定义VehicleFactory接口,CarFactory和PlaneFactory实现这个接口,再定义一个Moveable接口,Car和Plane类实现这个接口,最后通过接口指向具体类实现来灵活改变abstractFactory
声明一个Factory类,在此基础上继承出各种具体的Factory,像是DefaultFactory,MagicFactory之类的,然后再定义Vehicle, Food和Weapon 抽象类,Car类和Plane类实现Vehicle类,Apple和MushRoom实现Food类,AK47和MagicStick实现Weapon类,然后通过父类指向具体子类来实现灵活编程
策略(stratery)模式
定义一个Comparator接口,有一个compare(Object o1, Object o2)方法,CatWeightComparator和CatHeightComparator实现这个接口,定义一个Comparable接口,有一个compareTo(Object o)方法,Cat和Dog类实现这个接口,并说明使用哪个Comparator的实现类,调用的时候直接放入实现了Comparable接口的对象数组进行比较桥接(bridge)模式
先声明一个Gift类和GiftImpl类,Gift类里有一个GiftImpl的成员变量,然后GiftImpl有两个子类Flower类和Ring类,Gift类有两个子类WarmGift类和WildGift类,这样就可以定义Gift gift = new WarmGift(new Flower());
Gift gift2 = new WildGift(new Ring());
这就是桥接模式
命令(command)模式
一个Boy类,一个MM类,MM类里有一个Order(Boy b)的方法,所以MM只要发出各种具体的Command的命令,别的都是Boy来执行,Boy类里都是Command接口来实现具体的Command
可以参考这篇文章:http://www.cnblogs.com/sjms/archive/2010/07/09/1774069.html