21
2020
10

JDK 类库常用的设计模式有哪些?

答:JDK 常用的设计模式如下:


1)工厂模式


java.text.DateFormat 工具类,它用于格式化一个本地日期或者时间。


public final static DateFormat getDateInstance();

public final static DateFormat getDateInstance(int style);

public final static DateFormat getDateInstance(int style,Locale locale);


加密类


KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");

Cipher cipher = Cipher.getInstance("DESede");


2)适配器模式


把其他类适配为集合类


List<Integer> arrayList = java.util.Arrays.asList(new Integer[]{1,2,3});

List<Integer> arrayList = java.util.Arrays.asList(1,2,3);


3)代理模式


如 JDK 本身的动态代理。


interface Animal {

    void eat();

}

class Dog implements Animal {

    @Override

    public void eat() {

        System.out.println("The dog is eating");

    }

}

class Cat implements Animal {

    @Override

    public void eat() {

        System.out.println("The cat is eating");

    }

}


// JDK 代理类

class AnimalProxy implements InvocationHandler {

    private Object target; // 代理对象

    public Object getInstance(Object target) {

        this.target = target;

        // 取得代理对象

        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("调用前");

        Object result = method.invoke(target, args); // 方法调用

        System.out.println("调用后");

        return result;

    }

}


public static void main(String[] args) {

    // JDK 动态代理调用

    AnimalProxy proxy = new AnimalProxy();

    Animal dogProxy = (Animal) proxy.getInstance(new Dog());

    dogProxy.eat();

}


4)单例模式


全局只允许有一个实例,比如:


Runtime.getRuntime();


5)装饰器


为一个对象动态的加上一系列的动作,而不需要因为这些动作的不同而产生大量的继承类。


java.io.BufferedInputStream(InputStream);  

java.io.DataInputStream(InputStream);  

java.io.BufferedOutputStream(OutputStream);  

java.util.zip.ZipOutputStream(OutputStream);  

java.util.Collections.checkedList(List list, Class type) ;


6)模板方法模式


定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中。


比如,Arrays.sort() 方法,它要求对象实现 Comparable 接口。


class Person implements Comparable{

    private Integer age;

    public Person(Integer age){

        this.age = age;

    }

    @Override

    public int compareTo(Object o) {

        Person person = (Person)o;

        return this.age.compareTo(person.age);

    }

}

public class SortTest(){

    public static void main(String[] args){

        Person p1 = new Person(10);

        Person p2 = new Person(5);

        Person p3 = new Person(15);

        Person[] persons = {p1,p2,p3};

        //排序

        Arrays.sort(persons);

    }

}



« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。