JAVA基础之“常见设计模式”
必要知识:UML图标小结:
空心三角形+实线:继承,三角形一段为父类;
空心三角形+虚线:实现接口,三角形一段为接口;
空心菱形+实线箭头:聚合关系,A可以是B的一部分,但是B不能是A的一部分;箭头指向A;一般通过实例变量表现,两个类是平等关系;
实心菱形+虚线箭头:组合关系,A必须是B的一部分,A与B的生命周期相同,箭头指向A;一般通过实例变量表现,两个类是从属关系;
虚线箭头:依赖关系,A是B中方法的一个参数;B依赖A,才能让方法正常运行;一般在方法中的参数中出现;
实线箭头:关联关系,类之间相互了解,A类中引用了B类的实例;A中的属性箭头指向B;一般在成员变量中出现;
其中每种属性的前面会有修饰:“+”代表public、“-”代表private、“#”代表protected;
常见的设计模式有以下几类:
【单例模式】
--保证一个类仅有一个实例,且提供一个访问它的全局访问点,一般用静态变量(也就是全局变量)和静态方法实现;
“懒汉模式”:第一次使用的时候实例化;可能会有线程问题;
“饿汉模式”:被加载的时候进行实例化;比较占据资源;
【工厂模式】
--为创建对象提供过度接口(一个类),以便将创建对象的具体过程屏蔽起来,提高灵活性;(用面向对象的特性,将问题用面向对象思想分开,用一个单独的类来处理创造实例的过程,而不是在主流程中进行实例构建;涉及:松耦合、UML图;)
[简单工厂模式]:定义一个用于创建对象的接口(一个具体的类);一共三个角色:工厂类角色、抽象产品角色、具体产品角色;
[工厂方法模式]:不再由一个工厂类决定创建哪种实例,而是由抽象工厂的子类来决定常见哪种实例;一共四个角色:抽象工厂角色、具体工厂角色、抽象产品角色、具体产品角色;
[抽象工厂模式]:抽象工厂中不光有一类产品,可能有多个抽象产品;
(参考:https://www.cnblogs.com/cr330326/p/5627658.html)
【策略模式】
--封装不通的算法,使各算法之间互不干扰;根据需求,设计一个算法接口,有多个算法实现类,在调用时可以使用多态来(重载)调用不同的算法实现类,但是不需要改动代码,有新的需求,可以直接增加一个新的计算类;
【建造者模式】
--定义相应抽象类,和调用方法(也就是指挥者),不同的类在继承抽象类的时候,所有的方法都需要实现,所以不会缺失元素,用户调用时,用指挥者进行调用,防止与实现类方法接触;就像一个建造者一样,制定了大体模块,剩下的就是细化了;
【观察者模式】
--定义了一对多的关系,当一个对象的状态发生了变化,会通知所有的观察者对象,使得多个观察者对象作出相应的更新,一般在“目标类”中与“观察者类”中进行逻辑处理;使得目标类一旦做了操作,就会更新观察者对象;
【适配器模式】
--
[类适配器]:把一个类的接口(一个实现类),转变成用户希望的接口(可能不止原有的方法),通过类的继承实现;有三种角色:目标角色(用于被实现的接口)A、源角色(需要适配的类)B、适配器角色(必须是具体类)C;实现方式 C extends B implements A;
[对象适配器]:实现方式,C中调用B的方法,使得最终匹配A接口,但是不需要实现A接口;
【装饰模式】
--动态的给一个对象添加各种指责,使用抽象类来继承接口,但是不一定要完全实现(所以才是抽象类),出现变动就可以选择性的修改抽象类或者新增实现的抽象类;
建观工,单策装适;