首页 > 其他 > 详细

设计模式

时间:2020-06-04 20:35:59      阅读:36      评论:0      收藏:0      [点我收藏+]

01 策略模式(strategy pattern)

策略模式定义了算法族,分别封装起来,让它们之间可以相互替换。

 

02 观察者模式(observer pattern)

观察者模式定义了一系列对象之间的一对多关系,当一个对象改变状态,其它对象都会收到通知。

 

03 装饰者模式(decorator pattern)

装饰者模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

 

04 工厂模式(factory pattern)

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

抽象工厂模式;提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

 

05 单例模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。

在程序运行时,有些对象只需要一个,比如线程池(threadpool)、缓存(cache)、注册表(registry)和日志对象等,如果制造出多个实例,可能会导致程序运行异常,资源使用过量和运行结果不一致等问题。

经典实现:

技术分享图片
package singleton;

/**
 * @Author Pandas
 * @Date 2020/5/18 12:51
 * @Version 1.0
 * @Description 
 */
public class Singleton {
    //用静态变量记录singleton的唯一实例
    private static Singleton uniqueInstance;
    
    //把构造器私有,只能内部调用
    private Singleton(){}
    
    //提供public方法提供唯一实例
    public static Singleton getInstance(){
        if(uniqueInstance==null){
            uniqueInstance=new Singleton();
        }
        return uniqueInstance;
    }
}
View Code

在多线程环境中,多个线程同时调用getInstance方法的时候,可能会导致实例化多个对象,对此,有三个有效的解决办法:

1、对getInstance方法加同步锁(synchronized)

技术分享图片
    public static synchronized Singleton getInstance(){
        if(uniqueInstance==null){
            uniqueInstance=new Singleton();
        }
        return uniqueInstance;
    }
View Code

但是,只有第一次执行这个方法的时候,才需要同步,之后的每次调用,同步都是一个累赘,占用大量资源。

2、双重检查加锁(double-check lock)

技术分享图片
package singleton;

/**
 * @Author Pandas
 * @Date 2020/5/18 13:38
 * @Version 1.0
 * @Description 双重检查枷锁的单例模式
 */
public class SingletonDoubleCheckedLock {
    //volatile在此确保多个线程对unique Instance实例化对象的可见性
    private  volatile  static SingletonDoubleCheckedLock uniqueInstance;
    //私有化构造
    private SingletonDoubleCheckedLock(){}
    public static SingletonDoubleCheckedLock getInstance(){
        if(uniqueInstance==null){
            synchronized (SingletonDoubleCheckedLock.class){
                if(uniqueInstance==null){
                    uniqueInstance=new SingletonDoubleCheckedLock();
                }
            }
        }
        return uniqueInstance;
    }
}
View Code

3、饿汉模式(eagerly)

饿汉模式是以空间换时间,在类加载初始化的时候就创建唯一的对象,对空间要求不太高的时候可以使用。

技术分享图片
package singleton;

/**
 * @Author Pandas
 * @Date 2020/5/18 14:03
 * @Version 1.0
 * @Description 饿汉单例模式
 */
public class EagerlySingleton {
    private  EagerlySingleton(){}

    //初始化的时候就创建单例实列,保证了线程安全
    private static EagerlySingleton uniqueInstance =new EagerlySingleton();
    public static EagerlySingleton getInstance(){
        return uniqueInstance;
    }
}
View Code

 

06 命令模式(command pattern)

命令模式将请求封装成对象,以便使用不同的请求、队列或日志来参数化其它对象,即调用execute()方法就能完成请求。支持撤销(undo)操作。

 

07 适配器模式(adapter pattern)

将一个类的接口,转换成客户期望的另一个接口。适配器可以让原本不兼容的类可以合作无间。

 

08 外观模式

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

 

09 模板方法模式(template pattern)

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。

案例:排序算法

 

10 迭代器(iterator)与组合(composite)模式

迭代器模式提供一种方法顺序访问一个对象中的各个元素,而又不暴露其内部的表示。

组合模式:允许你将对象组合成树型结构来表现出“整体-部分”的层次结构。组合能以一致性的方式处理个别对象以及对象组合。

 

11 状态模式(state pattern)

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

 

12 代理模式()

为另一个对象提供一个替身或占位符以控制对这个对象的访问。

 

13 桥接模式(bridge pattern)

通过将实现和抽象放在两个不同类层次中而使他们可以独立改变。

 

14 生成器模式(build Pattern)

封装一个产品的构造过程,允许按步骤构造。

 

15 责任链模式(chain of pesponsibility pattern)

为某个请求创建一个对象链。每个对象依序检查此请求,并对其进行处理,或将它传给链中的下一个对象。

 

16 蝇量模式(flyweight pattern)

让某个类的一个实例能用来提供许多“虚拟实例”。

 

17 解释器模式(interpreter pattern)

为语言创建解释器,将每一个语法规则表示成一个类。

 

18 中介者模式(mediator pattern)

集中相关对象之间复杂的沟通和控制关系,常常用于协调相关的GUI组件。

 

19 备忘录模式(memento pattern)

可以储存对象之前的状态。在java中考虑用序列化(serialization)机制存储系统的状态。

 

20 原型模式(prototype pattern)

通过复制现有的实例创建新的实例。

 

21 访问者模式(visitor pattern)

。。。

 

last 复合模式

MVC模型

设计模式

原文:https://www.cnblogs.com/jwmdlm/p/12897391.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!