Java设计模式

本文参考于:
参考资料

1.设计模式概述


参考资料
GOF – 四人组

设计模式概念 : 代码设计经验的总结,是解决特定问题的模板。为了提高代码的可重用性和可靠性。

2.设计模式分类


  1. 创造型设计模式
  2. 结构型设计模式
  3. 行为型设计模式

3.UML类图


  1. 类图元素: 类名、属性、方法

    • 类名 : Name

    • 属性 : [可见性]属性名:类型[=默认值] , (可见性: public : + ,private:- , protected : # )

    • 方法 :[可见性]名称(参数列表)[:返回类型]

      类图示例

  2. 接口图:
    圆圈 + 接口名 + 方法

    接口图示例

  3. 类之间的关系:

    1. 依赖 : —>
    2. 关联 : 实线<实线>
    3. 聚合 : 菱形--- 部分属于整体 : 学校 菱形---老师
    4. 组合 : 实心菱形--- 部分组成整体,有相同生命周期
    5. 泛化 : 三角形实线 指示类的继承关系
    6. 实现关系 三角形--- 指示接口的实现

4.面向对象的设计原则


  1. 开闭原则

    定义: 对拓展开放,对修改关闭

    作用 : 提高代码可重用性、稳定性、可维护性。测试更方便

    实现:抽象约束,封装变化 :即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。

  2. 里氏替换原则

    定义: 通俗地说: 子类可以扩展父类的功能,但不能改变父类原有的功能。尽量不要进行重写操作。

    作用:

    • 避免继承中重写父类的方法,造成可复用性变差
    • 保证了类的拓展不会给原有系统引入新的错误,降低错误的可能性。

例子: 正方形不是特殊的矩形。

长方形有长、宽两种属性。正方形继承长方形后,长和宽总是相等。长方形中长和宽能独立变化,正方形继承长方形后,重写改变边长的函数,使得长和宽同时变化。

如果设定一个resize方法,一直增加长方形的宽度,直到增加到宽度超过高度才可以。那么如果针对子类正方形的对象调用resize方法,这个方法会导致正方形的边不断地增加下去,直到溢出为止。
此时理式原则的破环造成了程序的错误。

  1. 依赖倒置原则

    核心思想: 面向接口和抽象类编程,不要面向实现编程。

    作用:

    • 降低类之间的耦合性 (直接使用接口调用函数)
    • 由于抽象层一般比实现层更稳定,所以系统稳定性能提高。

    例子: 顾客从不同商店购买物品。假设商店有结算这个方法。如果不提供接口,顾客在不同商店购物就需要调用不同商店的函数,需要修改代码。而提供一个接口后,所有商店实例都使用共同的接口Shop,在不同商店结算不需要修改代码了。

  2. 单一职责原则
    控制类的粒度大小, 将对象解耦,提高内聚性。

    (耦合性: 模块间联系紧密程度,耦合性越高,模块独立性越低)

    (内聚性 : 模块内各元素联系紧密程度 , 内聚性越高,独立性越高)

  3. 接口隔离原则

    定义:一个类对另一个类的依赖应该建立在最小的接口上
    要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

    优点:

    • 模块粒度更小,系统更灵活,可维护性更高
    • 专用接口能够更能体现模块功能,和层次
    • 减少代码冗余
  4. 迪米特法则

    定义: 只与你的直接朋友交谈,不跟“陌生人”说话. 软件实体之间无需通信就不应该直接通信,可以通过第三方转发.

    优点:

    • 降低了类之间的耦合度,提高了模块的相对独立性

    实现方法:

    1. 从依赖者角度,只依赖该依赖的对象
    2. 从被依赖者的角度,只暴露该暴露的方法

    类的设计上:

    • 降低类成员的权限
    • 不暴露类的属性成员,提供相应的访问器
  5. 合成复用原则

    合成复用原则是 通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的. 新对象可以调用已有对象的功能,从而达到复用。

    继承复用缺点:

    1. 父类的细节暴露给子类,破坏了封装性
    2. 子类父类耦合度高.不利于拓展和维护
    3. 复用灵活性低. 继承父类后类型已经确定.

    合成复用优点:

    1. 维护了类的封装性.旧对象作为新对象的成员,新对象无法看到旧对象细节
    2. 耦合度低.
    3. 复用灵活性高. 如果指向旧对象的成员变量是接口,则可以动态引用实现了该接口的所有对象.

一、创建型模式


创建模式的特点: 将对象的创建和使用分离。降低系统耦合。使用者不需要关系对象的创建细节。

分类:

  1. 单列
  2. 简单工程
  3. 工厂方法
  4. 抽象工厂
  5. 建造者

1.1 单列模式

特点:

  • 一个类只有一个实例对象
  • 该对象仅由自己创建
  • 单例类对外提供访问该单例的全局访问点

应用场景:

  1. 只需要产生一个对象的时候
  2. 对象需要被共享的时候。例如线程池。

实现方法:

  1. 懒汉法:
    在类加载的时候初始化对象:

    线程安全。

    private static final Person person = new Person() ;

  2. 饿汉法:

    public static synchronized Person getInstance()
    {
         
    //在getInstance方法上加同步
    if(instance==null)
    {
         
             instance=new Person();
    }
    else
    {
         
       System.out.println("已经有一个总统,不能产生新总统!");
    }
    return instance;
    }
    

特点:
线程安全,但多线程访问的时候效率低。getInstance被同步了。

  1. 双重检测:

       public static  Person getInstance()
    {
         
       
       if(instance==null)
       {
         
          synchronized
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值