简单工厂模式
- 将具有相同属性事物用一个抽象基类,里面具有抽象方法来作为父类,然后其他子类通过继承来实现这个基类,通过重写实现基类里面的抽象方法
- 创建一个工厂方法,通过父类变量来
策略模式
- 就是在简单工厂模式的基础上,将工厂方法改成策略对象,然后去调用该对象的重写基类的抽象方法
单一职责原则
- 一个类里面通过一个功能来划分一个方法,而不是通过变量来判断一个方法里面选择哪个功能
开放-封闭原则(OCP)
- 对于扩展是开放的,对于修改是封闭的
- 对于需要频繁修改的功能,可以将其写成接口,然后功能类就继承自这个接口
依赖倒转
- 对象Car,引擎对象AutoSystem,
- 高层模块不应该依赖底层模块,都应该依赖抽象对象,如果依赖底层则底层修改,高层也要变动,增加了开发成本,如果依赖抽象底层或者高层变动都不会互相影响。
- 错误案例:一个类(Car)里面有功能方法,AutoSystem类是接受某个Car的对象,然后各种方法都是通过判断是哪种对象来实现各自对象的方法
- 正确修改:将各种相同需求的方法添加在一个接口里面ICar,AutoSystem类接受一个ICar的对象,然后调用对应的Car的功能方法,各种Car继承对应接口就行
- 通过接口降低耦合度
装饰模式
- 大话设计模式第六章
- 对象Person里面有虚方法Show,通用服饰类Finery继承自Person里面有接受Person对象的方法和重写的Show方法,具体的服饰TShirts继承自通用服饰类重写Show方法要调用基类的方法 base.Show()
代理模式
- 将动作方法放在一个接口里
- 被代理的对象类继承自这个接口,代理对象初始化一个被代理的对象,然后调用被代理对象的方法
工厂模式
- 将工厂方法放在一个接口里,然后各种具体的功能继承自这个接口返回一个方法对象,参照设计模式第八章
- 简单工厂是工厂类包含了必要的逻辑判断,根据客户端选择条件动态创建操作对象,工厂方法是用于创建对象的接口让子类去选择实例化哪一个类,是将实例化延迟到了子类
原型模式
- 通用对象Key钥匙是一个抽来类,里面有一个抽象方法Clone,具体宿舍钥匙或者是自行车钥匙类都是继承自这个抽象类Key,重写Clone方法返回自己当前的实例对象,自己的构造函数可以通过Base的构造函数来初始化完成
模板方法模式
- http://blog.jobbole.com/78088/
- 抽象对象烹饪里面包含倒油,翻炒等方法,还包含倒菜的抽象方法,具体的素菜类继承自烹饪类重写倒入素菜的方法
- 模板方法是将不变的行为搬到基类,子类重写变动的虚方法
迪米特法则
- 基类抽象类Person对象,里面有抽象方法操作方法,具体的庞庆龙类继承基类Person实现重写操作方法,禀报方法,太监类里面有一个传达方法专门初始化陌生人对象然后调用该对象的Operation方法,慈禧太后类里面有一个专属的太监对象,调用太监类对象的传达方法
- 迪米特法则就是避免两者直接对话而是通过第三方转达的方式
外观模式
- 外观模式就是个各类里面都有自己特有的方法,然后我想要根据特定的情况来调用各个对象的各个方法的组合
- 可以参考大话设计模式的12章
建造者模式
- 参考大话设计模式第13张
- 抽象类PersonBuilder里面有制造各个部件的抽象方法,构造方法是传入可变参数例如颜色,画笔粗细等,然后构建瘦弱的人类继承自PersonBuilder重写构建各个部位的胖瘦参数,构造函数也是传入颜色,画笔调用基类的构造函数,PersonDirector类构造函数是传入PersonBuilder对象然后调用基类对象的抽象方法,在传入的时候实际上传入的是继承自基类的子类对象,然后创造方法其实是调用的子类重写的方法
观察者模式
- 其实就是事件委托的一种典型应用,也是用的比较多的一种常见设计模式
抽象工程模式
- 大话设计模式第15章
- 将数据库操作Insert和Get方法放在接口里,SqlServer和Access的操作类继承自接口然后实现里面的方法,定义一个工厂接口里面有创建数据库操作的接口实现,返回的是一个数据库操作接口,SQL数据库工厂继承自IFactory实现里面的创建方法,AccessFactory同样,客户端用各个数据库的工厂来实例化IFactory对象然后调用里面的创建方法来实例化数据库操作接口,然后调用里面的Insert和Get方法。
- 企业开发数据库切换库就是使用的这种设计模式来实现不同数据库的快速切换
- 简单工厂来改变抽象工厂可以在创建数据库操作对象这个方法里面判断是什么类型的DB然后创建对应的数据库操作对象
- 进化:可以通过反射+抽象工厂来实现访问数据库,或者在将数据库配置信息写在配置文件里通过反射来访问对应的数据库
状态模式
- 大话设计模式第16章
- 案例:根据时间来判断做什么事情,一般就是方法里面写很长的if判断
- 改进:创建一个抽象类State里面有Handle抽象方法参数是Context上下文,状态A类继承自State实现里面的Handle方法,状态B同样,Context类构造函数接受一个State然后里面有一个Request响应方法,调用的是state对象的Handle处理方法。状态模式通过各种状态逻辑转移分部到State的子类之间,来减少相互依赖
适配器模式
- 解决问题:Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
- 定义客户端所期待的类里面有一个虚方法,然后定义适配器继承自这个接口重写里面的实现方法,客户端通过创建这个子类的对象来初始化基类对象来调用子类的重写方法
备忘录模式
- 举例:电脑备份,电脑类里面有一些属性,User类里面记录这个电脑对象,恢复方法就是调用返回电脑对象的属性
组合模式
- 也可参考设计模式19章
- 举例:抽象类Company里面有添加、删除、展示、履行职责等抽象方法,然后财务部,人事部类都继承自Company基类实现里面的具体方法,然后具体公司的类也继承自Company抽象类并且实现里面的方法参数是抽象类Company,传入的是继承自这个基类的各个部门的子类,然后用List搜集起来就形成了一个具体的公司,这就是组合方法
迭代器模式
- 设计模式第20章
- 举例:迭代器抽象类里面有First、Next、IsDone、CurrentItem等抽象方法、抽象类Aggregate继承自迭代器抽象类Iterator里面有创建迭代器对象抽象方法,ConcreateIterator具体迭代器类继承自Iterator里面有ConcreteAggregate对象,实现迭代器的抽象方法
单例模式
- 大话设计模式第21章
- 最简单的设计模式也是最常用的设计模式之一
桥接模式
命令模式
责任链模式
中介者模式
享元模式
解释器模式
访问者模式
模式总结