自己也写了很多代码了, 最近在对一个以前写的Android项目进行重构, 在重构的过程中发现, 无论怎样调整各种类之间的关系, 在某些方面有所改进的同时, 在另外一些方面产生了严重的问题, 总是不能取得一个合适的平衡点. 而且有一些方案起初感觉良好, 可随着代码的重构, 才发现这些方案存在严重缺陷, 完全不可行.

在这样的重构过程中, 我花费了很多时间, 但没有取得什么良好的效果, 甚至还凭空增加了代码的复杂度. 实际上, 这些问题的本质都是设计模式的问题, 通过学习设计模式, 我们可以学习到程序设计的一些客观规律, 从而使程序更易于维护和修改.

本文将记录设计模式的有关知识. 依据设计模式来进行设计和开发, 能够使程序更加灵活, 更好的适应客户复杂而多变的需求.

目录

设计模式的基本原则

面向对象设计原则

以下的一些原则是在面向对象设计的过程中, 应该遵守的基本原则虽然这些规则都不是强制的要求, 但是遵守这些规律可以减少我们对项目维护的难度. 设计模式的种类非常多, 所以我们更多的应该思考各种模式的本质, 从而做的自发的使用需要的模式.

原则 含义
单一职责 系统中的每一个类都应该只做一件事情
开闭原则 一个对象对扩展开放, 对修改关闭(通过增加代码完成新功能)
依赖倒转 抽象不应该依赖于细节, 细节应该依赖于抽象
里氏替换 任何出现抽象类的地方都可以使用它的子类替代
合成复用 优先使用组合而不是继承
迪米特原则 一个对象对另外一个对象的了解要尽可能少

单一原则使得一个类只有一个改变原因, 从而不会扩大修改对系统的影响.

单例模式

使用场景

如果某个类只需要一个全局的唯一实例, 则使用单例模式. 典型的场景是数据库的连接, 日志的输出文件, 这些类在整个程序中, 都只需要唯一的实例.

实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Singleton{
private static Singleton instance = null;

private Singleton() { }

public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}

要点分析

  • 通过是否为空判断, 使得第一次调用此函数的时候, 需要花费时间初始化, 其他时候调用都直接返回实例
  • 保证了始终使用同一个实例, 从而一定程度保证了数据的一致性
  • 保证了全局只有一个实例, 一定程度的节省了系统开销

最后更新: 2024年04月24日 15:50

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2017/11/05/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/