java设计模式总体来说分为三大类:
引用:https://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
创建型模式,共五种:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
并发型模式和线程池模式(生产者和消费者模式)
1 工厂模式
引用:https://blog.csdn.net/llussize/article/details/80276627
工厂模式适用于生产大量相似对象、 抽象工厂模式:生产家族(全套的各类对象)
静态工厂模式:将多方法工厂模式里的方法置为静态的,不需要创建实例,直接调用即可,较为常用。
public class SendFactory {
public static Sender produceMail(){ // 多方法工厂+static静态
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
public class FactoryTest {
public static void main(String[] args) {
Sender sender = SendFactory.produceMail(); // 不需要创建实例,直接调用即可
sender.Send();
}
}
抽象工厂模式(Abstract Factory):增加多个工厂类
public class SendMailFactory implements Provider {
public Sender produce(){
return new MailSender();
}
}
public class SendSmsFactory implements Provider{
public Sender produce() {
return new SmsSender();
}
}
2 单例模式
引用:https://www.cnblogs.com/lewis0077/p/5128971.html
单例模式在程序设计中非常的常见,一般来说,某些类,我们希望在程序运行期间有且只有一个实例,原因可能是该类的创建需要消耗系统过多的资源、花费很多的时间,要保证一个类在程序的生命周期当中只有一个实例,并且提供该实例的全局访问方法。
结构:
一般包含三个要素:
1.私有的静态的实例对象 private static instance
2.私有的构造函数(保证在该类外部,无法通过new的方式来创建对象实例) private Singleton(){}
3.公有的、静态的、访问该实例对象的方法 public static Singleton getInstance(){}
懒汉式:程序刚启动,先不创建实例,当外部调用该类的实例或者该类实例方法的时候,才创建该类的实例。是以时间换空间。优点:实例在被使用的时候才被创建,可以节省系统资源,体现了延迟加载的思想。缺点:容易生成多个实例
饥汉式:程序刚启动,不管外部有没有调用该类的实例方法,该类的实例就已经创建好了。以空间换时间。优点:在多线程下也能保证单例实例的唯一性,不用同步,运行效率高。缺点:系统资源占用多
3 适配器模式
定义: 作为两个不兼容的接口之间的桥梁,将一个类的接口(Adaptee),通过适配器(Adapter)转换成客户期望的另一个目标接口(Target)
4 代理模式
引用:https://www.imooc.com/video/4999
https://blog.csdn.net/fanrenxiang/article/details/81939357
1)静态代理:
静态代理的代理对象和被代理对象在代理之前就已经确定,它们都实现相同的接口或继承相同的抽象类。
聚合优于继承,可以适应代理执行顺序变换的场景
2)动态代理:jdk动态代理、cglib动态代理
AOP底层实现就是动态代理
5 装饰者模式
引用:https://blog.csdn.net/TTCCAAA/article/details/50458633
装饰器(Decorator) 装饰 组件(Component), 通过装饰,在原有对象的基础上得到了一个新的具有更多属性和行为的对象,
动态地将行为附加到对象上 提供了比继承更具有弹性的替代方案。
三个装饰器(新属性、行为),可以分别装饰安卓手机和苹果手机
6 观察者模式
引用:https://blog.csdn.net/TTCCAAA/article/details/50429901
当被观察者改变状态时,它的所有观察者都会收到通知并更新
报刊订阅实例,报社DailyNews ,Tom 和 Jerry 都订阅服务,每当有最新消息到来,报社就会通知他们,接着 Tom 取消了这个服务,则报社的最新消息不会通知 Tom 而只通知 Jerry。在这个过程中,DailyNews 报社扮演被观察者角色,Tom 和 Jerry 两个用户扮演观察者角色。
用户抽象接口,实现两个用户实体类
报社观察方法接口:NewsPaper, 注册观察者,删除观察者,通知观察者的功能
报社实体类:DailyNews implements NewsPaper
装饰器(Decorator) 装饰 组件(Component), 通过装饰,在原有对象的基础上得到了一个新的具有更多属性和行为的对象,
动态地将行为附加到对象上 提供了比继承更具有弹性的替代方案。三个装饰器(新属性、行为),可以分别装饰安卓手机和苹果手机。
至此结束。