java设计模式

java设计模式:

1、单例模式

/*
* 懒汉式单例模式
* 特点:在类加载时没有生成单例,只有当第一次调用getInstance时才会创建这个单例
* 缺点:使用了同步机制,影响性能。
* */
public class LazySingleton {
    private static volatile LazySingleton instance = null; //保证instance在所有线程中同步,volatile关键字保证了变量的可见性

    private LazySingleton() {
    } //避免类在外部被实例化

    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}
/*饿汉式单例模式
特点:在类加载时就会创建单例,是线程安全的。
* */
public class HungrySingleton {
    private static final HungrySingleton instance=new HungrySingleton();//线程安全
    private HungrySingleton(){}
    public static HungrySingleton getInstance(){
        return instance;
    }
}

2、工厂模式

public interface Product {
    void show();
}

public class ConcreteProduct1 implements Product{
    @Override
    public void show() {
        System.out.println("ConcreteProduct1 show");
    }
}

public class ConcreteProduct2 implements Product{
    @Override
    public void show() {
        System.out.println("ConcreteProduct2 show");
    }
}

public interface AbstractFactory {
    Product createProduct();
}

public class ConcreteFactory1 implements AbstractFactory{
    @Override
    public Product createProduct() {
        return new ConcreteProduct1();
    }
}

public class ConcreteFactory2 implements AbstractFactory{
    @Override
    public Product createProduct() {
        return new ConcreteProduct2();
    }
}

public class Test {
    public static void main(String[] args)throws Exception{
        Class clazz=ConcreteFactory1.class;
        ConcreteFactory1 concreteFactory1=(ConcreteFactory1)clazz.newInstance();
        ConcreteProduct1 concreteProduct1=(ConcreteProduct1) concreteFactory1.createProduct();
        concreteProduct1.show();
    }
}

3、代理模式

public class DynamicProxy implements InvocationHandler {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before");
        method.invoke(proxy,args);
        System.out.println("after");
        return null;
    }
}

4、迭代器模式

5、原型模式

/**
 * 原型模式
 * 特点:用一个已经创建的实例作为原型,通过复制该原型对象创建一个和原型相同或者相似的新对象
 */
public class Prototype implements Cloneable {
    public Prototype(){
        System.out.println("创建成功");
    }
    public Object clone() throws CloneNotSupportedException{
        System.out.println("复制成功");
        return (Prototype)super.clone();
    }
}
原文地址:https://www.cnblogs.com/BonnieWss/p/10474642.html