设计模式
代理模式 将realImage通过proxyImage来调用。
realImage与proxyImage在功能上是等价的,没有新增和减少功能。
适配器模式 VlcPlayer, MP4Player的适配类。这样在AudioPlayer中只需要调用适配类来完成功能,同代理类的区别在于,AudioPlayer新增了适配的功能,代理类不能改变所代理类的功能。
适配器的核心在于将两个不相关的类整合到一起去。实现某一个类的功能的叠加。
就是说AudioPlayer要具有AdvancedMediaPlayer的功能。那就要创建一个AdvancedMediaPlayer的适配类。
装饰器模式 扩展了被装饰类的功能。装饰器跟代理类有点类似,但是传递的参数不太一样,装饰器传递的是被装饰的类,代理类则要隐藏被代理的类,传递的参数是被代理的类需要的参数。
关于工厂模式:静态工厂方法,享元模式(相当于单例模式)
package pattern.factory; public class FoodFactory { // 方式一 public static Food getFood(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException { if (type.equalsIgnoreCase("mcchicken")) { return McChicken.class.newInstance(); } else if (type.equalsIgnoreCase("chips")) { return Chips.class.newInstance(); } else { System.out.println("哎呀,找不到相应的实例化类啦"); return null; } } // 方式二 public static Food getInstance(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException { return (Food) Class.forName(name).newInstance(); } // 方式三 public Food getFoodInstance(String type) { if (type == null) { return null; } if (type.equalsIgnoreCase("mcchicken")) { return new McChicken(); } else if (type.equalsIgnoreCase("chips")) { return new Chips(); } return null; } }
享元模式:
public class ShapeFactory { private static final HashMap<String, Shape> circleMap = new HashMap<String, Shape>(); public static Shape getCircle(String color) { Circle circle = (Circle) circleMap.get(color); if (circle == null) { circle = new Circle(color); circleMap.put(color, circle); System.out.println("Creating circle of color:" + color); } return circle; } }
区别在于:
工厂模式创建了不同的对象,但是享元模式根据不同的参数,公用同一个对象。
策略模式是对接口的简单应用,模板模式是对抽象类的应用。
组合模式及责任链都是对自身的引用。
出处:http://cnblogs.com/daishuguang