java(设计模式)

2019-01-26  本文已影响0人  luckee

前言

设计模式-1
设计模式-2

5种创建型模式

工厂方法模式

要构建的对象,实现相同的接口

抽象工厂模式

跟工厂方法模式相比,将工厂本身也抽象化了,有一个工厂接口provider,工厂都实现这个接口

单例模式(singleton)

JVM中只存在一个该类的对象,且只实例化一次,使用内部类来实现

public class Singleton {
 
    /* 私有构造方法,防止被实例化 */
    private Singleton() {
    }
 
    /* 此处使用一个内部类来维护单例 */
    private static class SingletonFactory {
        private static Singleton instance = new Singleton();
    }
 
    /* 获取实例 */
    public static Singleton getInstance() {
        return SingletonFactory.instance;
    }
 
    /* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
    public Object readResolve() {
        return getInstance();
    }
}
public class EagerSingleton {
    //饿汉单例模式
    //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
    
    private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化
    
    private EagerSingleton() 
    {
        //私有构造函数
    }
    
    public static EagerSingleton getInstance()    //静态,不用同步(类加载时已初始化,不会有多线程的问题)
    {
        return instance;
    }
    
}
public class LazySingleton {
    //懒汉式单例模式
    //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
    
    
    private static LazySingleton intance = null;//静态私用成员,没有初始化
    
    private LazySingleton()
    {
        //私有构造函数
    }
    
    public static synchronized LazySingleton getInstance()    //静态,同步,公开访问点
    {
        if(intance == null)
        {
            intance = new LazySingleton();
        }
        return intance;
    }
}

构建者模式

原型模式(prototype)

以一个原对象为模板,返回原对象的复制(深拷贝和浅拷贝)

public class Prototype implements Cloneable, Serializable {
 
    private static final long serialVersionUID = 1L;
    private String string;
 
    private SerializableObject obj;
 
    /* 浅复制 */
    public Object clone() throws CloneNotSupportedException {
        Prototype proto = (Prototype) super.clone();
        return proto;
    }
 
    /* 深复制 */
    public Object deepClone() throws IOException, ClassNotFoundException {
 
        /* 写入当前对象的二进制流 */
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(this);
 
        /* 读出二进制流产生的新对象 */
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return ois.readObject();
    }
 
    public String getString() {
        return string;
    }
 
    public void setString(String string) {
        this.string = string;
    }
 
    public SerializableObject getObj() {
        return obj;
    }
 
    public void setObj(SerializableObject obj) {
        this.obj = obj;
    }
 
}
 
class SerializableObject implements Serializable {
    private static final long serialVersionUID = 1L;
}

7种结构性模式

image.png

适配器模式

装饰器模式

代理模式

外观模式

此三者目前分不太清,感觉都是代理模式

桥接模式

典型的例子是JDBC的实现,java提供统一的数据库接口,具体的实现由数据库厂商完成,厂商提供数据库驱动包

组合模式

典型的例子是树状结构

享元模式

典型的例子是连接池

11种行为型模式

image.png

观察者模式

其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系

访问者模式

上一篇下一篇

猜你喜欢

热点阅读