软件设计原则和设计模式
一、软件设计原则:
- 开单代依接最合
1.开闭原则(开):
- 提高软件系统的可复用性及可维护性
2.单一职责原则(单):
- 降低类的复杂性,提高可读性,提高可维护性,降低变更引起的风险
3.里氏替换原则(代):
- 如果一个软件实体适用于一个父类的话,那一定适用于其子类,子类型一定能替换父类,而程序逻辑不变。子类继承父类时,要保留父类的所有功能,可以新增属性与方法,但不是覆盖,除非抽像方法。即用子类替换父类来被操作时,结果不变,子类重写父类方法,入参范围应比父类大,返回范围比父类小。
- 结束继承泛滥,加强程序健壮性,变更时做到更好的兼容性。提高维护性,扩展性,减少变更风险;
4.依赖倒置原则(依):
- 减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性,降低修改程序所造成的风险
5.接口隔离原则(接):
- 一个类的依赖应该建立在最小的接口上,尽量细化接口,接口中的方法尽量少;注意适度细化
6.迪米特法则(最):最少知道原则
- 只和朋友交流。出现在成员变量,方法的输入,输出参数中的类成为朋友类,而现出在方法体内部的类不是朋友类;与业务无关的类,不能出现在输入或输出的参数中;
7.合成复用原则(合):
- 尽量使用对象组合,聚合,而不是继承关系达到复用的目的。可以使系统更加灵活,降低类与类之间的耦合度。白箱复用。
- 关联关系强弱,继承,较强,组合,弱,聚合
设计模式
1、写出优雅的代码
2、更好地重构项目
3、经典框架都在用设计模式解决问题
4、阅读经典代码
1、工厂模式:对象由提供的工厂创建,非由客户new出来
- 1.简单工厂(Simple Factory Pattern)非23种模式:实现直接生产obj的工厂;简单,新增产品,需修改工厂;缺点:工厂类的职责相对过重,违背单一职责原则
- 2.工厂方法模式(Fatory Method Pattern)<创建型设计模式>:工厂抽象化,具体工厂生产单一产品;新增产品,则新增生产该产品的具体工厂;缺点:类数量过多
- 3.抽象工厂模式(Abastract Factory Pattern)<创建型设计模式>::在工厂方法模式基础上,将产品也抽象化(接口);客户定义产品和工厂,分别实现工厂和产品接口。新增产品,则新增具体产品和工厂的实现;更灵活
- 缺点:新增产品,需修改工厂接口
2.单例模式:确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。任何情况下,全局唯一
拆分业务:私有化构造器,线程安全,延迟加载,防序列化,防反射
分类:
- 饿汉式:线程安全,内存占用高
- 懒汉式:线程不安全,内存占用低
- 注册式:Enum,类似饿汉式,占用高
- 容器式:Ioc容器,线程不安全,占用低
- ThreadLocal式(非全局唯一):线程内部安全,占用较低
原型模式(Prototype Pattern)创建型模式:需要使用java深克隆
- 预先创建一个原型
- 采用克隆(深克隆)复制原型,得到想要的对象
建造者模式(Builder Pattern):创建型模式 先准备零件,再装配工具
- 初始化资源较多
- 产生对象的过程较繁琐
- 构造函数复杂
- 循环体内产生大量对象