最近学习了命令模式,观察者模式,装饰者模式,工厂模式,抽象工厂模式,单例模式。
1·命令模式:
主要包含四个元素:的
接收者:负责执行命令;
命令:是一个接口,用来做命令的载体;
具体命令:命令的实现类;
请求者:发送请求的人;
原理:
其实就是请求者向接收者发送请求,但是要把命令封装起来,减少请求者和接收者的耦合。(许多设计模式都是为了解耦)
2·观察者模式
元素:
抽象被观察者角色:把所有对观察者对象的引用保存在一个集合中,每个被观察者角色都可以有任意数量的观察者。被观察者提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。
原理:
被观察者就类似于一台电视,观察者是看电视的人,只有看电视的人才能获取到电视放映的节目信息,被观察者由其实现类实现,那些调用了被观察者接口的观察者们,执行了相关方法后,观察者的实现方法会将result返回给观察者。
是被观察者自己提供了一套方案给其他类使用,但是不清楚具体的观察者是谁的情况。
3·装饰者模式
拓展一个对象的功能,但不改变其源码,比生成他的子类来重写更灵活(解耦)
比如一个麻雀,可以飞50米,new了一个麻雀之后,执行飞50米这个办法,然后自己写了一个再飞20米的方法,这样在不重写的前提下,做到了功能扩展。
4·工厂模式
算是很常用的一个设计模式了,原理指的是我们调用某个接口(A)实现类(Aimpl)中的方法时,但是又不想去new
它,或者说 这个接口的实现类是内部的,不允许我们来调用,那么我们创建一个自己的接口(B),其中增加一个getA()的方法,获取到A对象,在通过A对象的内置接口方法,获取到其内置实现类可以实现的属性和方法。
5·抽象工厂模式
设计某些系统时,需要提供一组相关的对象,但系统不希望用户直接将对象new出来进行使用(比如private的,提供服务方,)
而应用系统自动化的去创建他们。
思路:军队需要士兵提供武器,但不需要士兵亲自去建造,因此应该有一个武器厂来自动的生产武器,然后士兵来获取武器。
(这里,士兵就是用户,而武器厂,就是抽象工厂的模式具现)
关键:在一个abstract或interface中,定义方法,返回相关对象的实例,该抽象类让其子类重写这些方法而为为用户提供相关对象。
6·单例模式
单例模式指的是有些对象不需要被重复的生成,只提供一个实例,一般分为两种写法,分为懒汉式和饿汉式
懒汉式不会在初始化时new出这个单例对象,在调用时进行判断,对象为空则new,否则直接使用已经存在的对象;
饿汉式是在初始化时创建好单利对象,调用时直接使用。
要注意的是创建时应该将构造方法私有化,尽量将单例类中所有属性和方法私有化,静态化,考虑并发时,要加入线程安全关键字,sychornized或者valitile。