网站怎么才能被搜到,网站设计 案例,什么软件发短视频可以赚钱,网站后台编辑器不能用java中设计模式共23种#xff0c;根据使用场景可分为创建型模式、结构型模式、行为型模式。
创建型#xff1a; 如何创建对象。
单例模式#xff1a;保证一个类在一个程序中只能创建一个对象。例如windows任务管理器窗口只需要创建一个。单例模式只创建一个对象#xff0…java中设计模式共23种根据使用场景可分为创建型模式、结构型模式、行为型模式。
创建型 如何创建对象。
单例模式保证一个类在一个程序中只能创建一个对象。例如windows任务管理器窗口只需要创建一个。单例模式只创建一个对象这个对象由单例类自己创建并向外提供访问方法。 实现方式有两种 1.饿汉式(急切式)在类加时就把唯一单例对象创建好了。 2.懒汉式在类加载时并不创建单例对象在第一次获取单例对象时才创建。存在线程安全问题解决办法是双重检索 volatile关键字。
简单工厂有一个工厂类负责生产某一类产品。同一类产品具备同一个抽象父类抽象类,接口。将创建对象与使用对象分离spring框架就是这种设计思想。简单工厂违背了开闭原则添加一个产品就需要修改工厂代码。
工厂方法对工厂进行抽象一个抽象的产品对应一个抽象的工厂一个具体的产品对应一个具体的工厂一个具体的工厂负责生产一个具体的产品。需要扩展新产品时只需要添加新的具体产品类和新的生产该产品的具体工厂类即可这样就不需要修改原来的工厂符合开闭原则。
抽象工厂生产一系列产品(某个公司的产品小米手机、小米汽车、小米电视等)在抽象的工厂中定义生产不同的产品具体的工厂负责生产一个公司的一系列产品。
原型模式在开发过程需要创建多个数据相同的对象因为每次使用new创建开销比较大所以使用对象克隆以先创建出来的原型对象为模板进行对象复制提高了创建效率。例如简历写一份复制多份奖状复制多份学校信息一致只要填写名字即可。
结构型
代理模式目标对象的代理者。汽车厂卖汽车不可能自己去卖可以让4s店代理去卖。4s店不光可以卖汽车还可以帮助客户上牌、买保险、提供售后等。帮助目标实际的执行者增加额外的功能而不用修改目标代码。 优点将目标与添加的功能相分离保护目标对象耦合度降低增加新的功能不需要修改目标对象。 代理实现可以分为静态代理和动态代理 静态代理一个代理类可以对某一类的目标提供代理满足开闭原则添加一类目标时,可以扩展添加一个新的代理类代码是写死的不灵活。对于框架这种场景就不太适合因为框架要对任意的类进行代理静态代理就不能满足需求了。在我们项目中如果只对某类对象进行代理可以选择静态代理。 动态代理在运时可以动态创建代理类分为 jdk 代理和 cglib 代理 jdk 代理:创建一个代理对象生成器实现InvocationHandler重写invoke方法此方法会被代理动态调用。代理对象在运行时被动态的创建可以代理任意的目标对象提高灵活性。但是被代理的目标对象必须实现一个接口在生成代理对象时需要通过接口来获取目标对象信息。底层实现使用的是反射机制。 cglib 代理不需要目标类去实现接口采用动态字节码生成技术为我们的目标类生成一个子类对象。当调用方法时对方法进行拦截调用目标类方法。要求目标类不能是 final 修饰的方法也不能是 final 和 static 修饰的。、 spring 框架中两种代理生成机制都实现了可以根据目标是否实现接口自动选择生成代理对象的方式默认采用 cglib 代理生成。
适配器模式为两个互不相通的事物之间提供一个转换器使得两者可以互通。
模版方法模式在程序开发中有些实现步骤的流程是固定的。可以抽取父类在父类中实现各个步骤再在父类中定义一个流程控制方法在此方法中按照步骤调用执行。将某个容易发生变化的步骤定义为抽象方法针对不同的情况可以扩展一个子类实现抽象方法。最终是由子类对象调用父类中流程控制的方法即可。