Java设计模式之工厂模式、装饰者模式、观察者模式

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), 通过装饰,在原有对象的基础上得到了一个新的具有更多属性和行为的对象,
动态地将行为附加到对象上 提供了比继承更具有弹性的替代方案。三个装饰器(新属性、行为),可以分别装饰安卓手机和苹果手机。

至此结束。

猜你喜欢

转载自blog.csdn.net/sinat_41144773/article/details/88830910