
1.1 属于创建型模式
- 1、单例类只能有一个实例。
- 2、单例类必须自己创建自己的唯一实例。
- 3、单例类必须给所有其他对象提供这一实例。
1.2 2种实现方式:
懒汉式:第一次调用才初始化,避免内存浪费
饿汉式:类加载时就初始化
工厂模式(factory)属于创建型模式
工厂模式使其创建过程延迟到子类进行,主要解决接口选择的问题;
常见的有:
建造者模式(builder)一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
一些基本部件不会变,而其组合经常变化的时候。建造者模式更加关注与零件装配的顺序
常见的有:
适配器模式(Adapter)属于结构型模式,作为两个不兼容的接口之间的桥梁
主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。可以让任何两个没有关联的类一起运行
何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。
如何使用:继承或依赖这个类,重写方法,然后在另一个类中调用
常见的有:
桥接模式(Bridge)这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
关键代码:抽象类依赖实现类。
一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。对于两个独立变化的维度,使用桥接模式再适合不过了。
常见的有:
过滤器模式(Filter)这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
常见的有:
装饰(Decorator)允许向一个现有的对象添加新的功能,同时又不改变其结构。属于结构型模式
主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并 且随着扩展功能的增多,子类会很膨胀。可代替继承。
何时使用:在不想增加很多子类的情况下扩展类。
如何解决:将具体功能职责划分,同时继承装饰者模式。
享元模式(pool)主要用于减少创建对象的数量,以减少内存占用和提高性能。
其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。
使用场景: 1、系统有大量相似对象。 2、需要缓冲池的场景。
代理(Proxy)意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
何时使用:想在访问一个类时做一些控制。
如何解决:增加中间层。
关键代码:实现与被代理类组合。
责任链模式属于行为型模式。通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
使用场景: 1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 3、可动态指定一组对象处理请求。
实例:JAVA WEB 中 Apache Tomcat 对 Encoding 的处理,Struts2 的拦截器
策略模式(ribbon)一个类的行为或其算法可以在运行时更改
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
MVC模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图) - 视图代表模型包含的数据的可视化。
- Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。
- 前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应用程序,也可以是基于桌面的应用程序。
- 调度器(Dispatcher) - 前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。
- 视图(View) - 视图是为请求而创建的对象。
用于对应用程序的请求或响应做一些预处理/后处理。
- 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。
- 过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器。
- Target - Target 对象是请求处理程序。
- 过滤管理器(Filter Manager) - 过滤管理器管理过滤器和过滤器链。
- 客户端(Client) - Client 是向 Target 对象发送请求的对象。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)