23种设计模式:
**意义:**使代码走的更远,更强大,更安全,更加有体系,更加符合人类思考的一些方式。
面向对象软件设计SOLID原则:
单一职责原则(Single responsibility principle):一个类或者模块只负责完成一个职责。
开闭原则(Open-closed principle):对修改关闭,对拓展开放。
添加一个功能应该是在已有的代码的基础上进行扩展,而不是修改已有的代码。
里氏替换原则(Liskov substitution principle):子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。一般利用多态。
接口隔离原则(Interface segregation principle):客户端不应该强迫依赖它不需要的接口
依赖倒置原则(Dependency inversion principle):高层模块(调用者)不要依赖低层模块(被调用者),高层模块和低层模块应该通过抽象来相互依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。
创建型模式:
单例模式:
饿汉式模板:
懒汉式模板:
DCL懒汉式模板:
改进的懒汉式模板:
破解以上:
枚举模板:
工厂模式:
无工厂的时候(顾客自己买的时候也需要自己造):
简单工厂模式:
弊端:增加一种车型,也需要改变工厂的代码,不满足开闭原则
建工厂(工厂负责生产车):
顾客通过工厂来买车,不需要关心车的生产:
工厂方法模式:
工厂的接口:
特斯拉的工厂:
五菱的工厂:
顾客找相应的车的车厂买:
抽象工厂模式:
建手机接口:
建路由器接口:
实现小米手机:
实现华为手机:
实现小米路由器:
实现华为路由器:
建工厂接口:
建小米工厂:
建华为工厂:
顾客:
建造者模式:
定义抽象的建造者:
定义产品:
定义具体的建造者:
指挥者:
测试:
原型模式(克隆):
原型的类需要实现Cloneable接口,在重写clone()方法。
原型对象调clone()方法得到新的对象。
克隆出来的新对象,与原型对象内容(值)相同,但是hashcode不同(两个不同对象)。
浅克隆(两个对象指向同一个date)暗星:
原型对象属性date的值改变, 克隆对象的属性date的值也会改变。
指向同一个date。
深克隆:
把原型类中的重写的clone()方法改变(把它的引用类型属性也进行克隆):
两个对象指向了不同的date。原型对象的属性date改变,不会影响克隆对象的属性date的值。
结构型模式:
适配器模式:
1.用继承(类适配器)网线方式写适配器:
1.1补全客户端类(电脑)
2.用组合(对象适配器:常用)方式写适配器:
2.1补全客户端类(电脑)
代理模式:
静态代理:
租房这件事:
房东:
代理(中介):
顾客:
代理还可以有一些自己的方法(自己能干的事):
顾客改为:
动态代理:
照样可以给代理增加一些自己的方法:
形成万能的动态代理模板:
桥接模式:
在一个维度扩展,而不影响另外一个维度。
先引入多继承结构:
转化为这种桥接模式(有两个维度),方便扩展。
将两种维度连接在一起:
装饰者模式:
创建抽象的装饰器,实现组件接口。
添加第一个装饰类,需继承装饰器。
测试:
再添加第二个装饰类,继承装饰器
测试: