设计模式

代理模式 将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;
    }
}

区别在于:

工厂模式创建了不同的对象,但是享元模式根据不同的参数,公用同一个对象。

策略模式是对接口的简单应用,模板模式是对抽象类的应用。

组合模式及责任链都是对自身的引用。

原文地址:https://www.cnblogs.com/daishuguang/p/5271744.html