![](https://img-blog.csdnimg.cn/20201216095452637.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
23种设计模式
使用最简洁的方式,讲解六大设计原则和23种设计模式。
杨林伟
像火箭科学家一样思考!
展开
-
六大设计原则-单一职责原则【Single Responsibility Principle】
六大设计原则单一职责原则里式替换原则依赖导致原则接口隔离原则迪米特原则开闭原则单一职责原则定义: There should never be more than one reason for a class to change (接口单一,职责分明)例子: 违背单一职责,用户属性和用户行为写在了一起,修改后如下: 附上代码:..........原创 2018-01-22 15:29:23 · 679 阅读 · 0 评论 -
六大设计原则-里式替换原则【Liskov Substitution Principle】
六大设计原则单一职责原则里式替换原则依赖导致原则接口隔离原则迪米特原则开闭原则里式替换原则定义: functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.中文含义:只要父...原创 2018-01-23 19:29:32 · 622 阅读 · 0 评论 -
六大设计原则 -依赖倒置原则【Dependence Inversion Principle】
六大设计原则单一职责原则里式替换原则依赖倒置原则接口隔离原则迪米特原则开闭原则依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。解決方法:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率代码:class Newspaper ...原创 2018-01-23 20:11:44 · 603 阅读 · 0 评论 -
六大设计原则-接口隔离原则【Interface Segregation Principle】
六大设计原则单一职责原则里式替换原则依赖倒置原则接口隔离原则迪米特原则开闭原则接口隔离原则定义:Clients should not be forced to depend upon interfaces that they don’t use(客户端不应该依赖它不需用的接口)The dependency of one class to another ...原创 2018-01-24 17:26:43 · 599 阅读 · 0 评论 -
六大设计原则-迪米特原则【Low Of Demeter】
六大设计原则单一职责原则里式替换原则依赖倒置原则接口隔离原则迪米特原则开闭原则迪米特原则定义:最少知识原则(Least Knowledge Principle,简称 LKP),一 个类对自己需要耦合或者调用的类应该知道的最少。引出问题: 类图描述的就是客户端(Client)使用安装器安(InstallSoftware)装压缩包(Wizard)的关系。...原创 2018-01-26 18:06:27 · 414 阅读 · 0 评论 -
六大设计原则 - 开闭原则【Open Close Principle】
六大设计原则单一职责原则里式替换原则依赖倒置原则接口隔离原则迪米特原则开闭原则开闭原则定义: Software entities like classes, modules and functions should be open for extension but closed for modifications. 一个软件实体应该对扩展开放,对修改关闭。定...原创 2018-01-27 11:42:05 · 935 阅读 · 0 评论 -
设计模式1 - 策略模式【Strategy Pattern】
策略模式定义: 指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。例子(锦囊妙计): Code:定义接口:/*** 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口*/public interface IStrategy { //每个锦囊妙计都是一个可执行的算法 p...原创 2018-01-29 19:37:29 · 771 阅读 · 1 评论 -
设计模式2 - 代理模式【Proxy Pattern】
代理模式定义: 其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。Code(潘金莲例子):定义接口(描述女人):/*** 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人*/public interface KindWomen { //这种类型的...原创 2018-01-29 19:48:08 · 516 阅读 · 2 评论 -
设计模式3 - 单例模式【Singleton Pattern】
单例模式定义: 一个类只有一个对象实例例子: 皇帝要为一个单例:public class Emperor { //定义一个皇帝private static Emperor emperor = null; private Emperor(){ //世俗和道德约束你,目的就是不让你产生第二个皇帝} public static Emperor get...原创 2018-01-30 16:39:45 · 495 阅读 · 0 评论 -
设计模式4 - 多例模式【Multition Pattern】
多例模式定义: 作为对象的创建模式,多例模式中的多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。例子:类图: 直接上代码(看了单例后,看这个傻子都懂): public class Emperor { //最多只能有两个皇帝 private static int maxNumOfEmperor = 2; ...原创 2018-01-30 17:01:35 · 691 阅读 · 0 评论 -
设计模式5 - 工厂方法模式【Factory Method Pattern】
工厂方法模式定义: 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。例子(女娲造人):类图: 代码:public class HumanFactory { ...原创 2018-01-30 18:56:26 · 434 阅读 · 0 评论 -
设计模式6 - 抽象工厂模式【Abstract Factory Pattern】
抽象工厂模式定义: 所有形态的工厂模式中最为抽象和最具一般性的一种形态,为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。例子: 分析: 接上一节”女娲造人例子”,有了丹炉去造人了,但是问题来了,新增了一个需求,造的人需要增加性别。简单的说,就是在工厂里面,生产的每一个实体,里面都有一个获取性别的方法。 同时: 也要也要增加分为男性和女性的...原创 2018-01-31 16:10:24 · 575 阅读 · 0 评论 -
设计模式7 - 门面模式【Facade Pattern】
门面模式定义:是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。例子(投递信件,流程封装在类里面): 写信流程类:/*** 定义一个写信的过程*/public interface LetterProcess { //首先要写信的内容 public void writeConte...原创 2018-01-31 18:51:58 · 379 阅读 · 0 评论 -
设计模式8 - 适配器模式【Adapter Pattern】
适配器模式定义: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。可分为类适配器模式 、 对象适配器模式 和 接口适配器模式。类适配器模式 (把110V电源转为220V电源):/** * 110V电源 */ public interface Power110V { ...原创 2018-02-01 19:21:52 · 538 阅读 · 0 评论 -
设计模式9 - 模板方法模式【Template Method Pattern】
模板方法模式定义: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the alg...原创 2018-02-03 14:41:00 · 544 阅读 · 0 评论 -
设计模式10 - 建造者模式【Builder Pattern】
建造者模式定义: 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一般建造者模式有几个对象内容: Product:要创建的复杂对象。 Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。 ConcreteBuilder:实现Build...原创 2018-02-03 15:18:13 · 428 阅读 · 0 评论 -
设计模式11 - 桥梁模式【Bridge Pattern】
桥梁模式定义: 将抽象部分与实现部分分离,使它们都可以独立的变化。重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。类图:举例:(智能手机使用安装包的例子)—未优化的例子—/** * 智能手机抽象类 */ public abstract class SmartPhone { ...原创 2018-02-24 15:21:18 · 497 阅读 · 0 评论 -
设计模式12 - 命令模式【Command Pattern】
命令模式定义: 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。而命令模式就是将“行为请者”与“行为实现者”解耦的。类图:举例(客户提出需求给需求部门、美工部门、开发部门):描述: 客户(Client)如果提出一个需求(Command),增加语音识别功能。没使用命令模式之前,客户(Client)是这样操作的,先通知需求部门(Receiver...原创 2018-02-25 18:20:01 · 488 阅读 · 0 评论 -
设计模式13 - 装饰模式【Decorator Pattern】
装饰模式定义: 指的是在 “不必改变原类文件 ” 和 “不使用继承” 的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。举例 ( 如何让家长在差的成绩单基础上看到感觉更好的成绩 ) :正常的学校下发成绩单流程:public abstract class SchoolReport { public...原创 2018-02-26 11:08:49 · 461 阅读 · 0 评论 -
设计模式14 - 迭代器模式【Iterator Pattern】
迭代器模式已经过时了,随便看看吧,下面的代码都是复制过来的。定义: 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。举例:未修改前的代码:public interface IProject { //从老板这里看到的就是项目信息 public String getProjectInfo(); } public cla...原创 2018-02-26 14:43:22 · 388 阅读 · 0 评论 -
设计模式15 - 组合模式【Composite Pattern】
组合模式定义: 又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象举例(公司组织架构例子): 直接上例子,理解的不深,写下日后回顾:UML图: public class Employee { private String name; private String dept; private int salary; private Lis...原创 2018-02-27 20:09:28 · 387 阅读 · 0 评论 -
设计模式16 - 观察者模式【Observer Pattern】
观察者模式定义: 观察者模式是一种行为型模式,当一个对象被修改时,则会自动通知它的依赖对象。举例(进度条实时刷新):/** *进度改变接口 */public interface OnUpdateProgress { void onProgress(int progress);} /** *进度改变管理者(负责观察者的注册与通知) */public...原创 2018-02-28 19:37:01 · 355 阅读 · 0 评论 -
设计模式17 - 责任链模式【Chain of Responsibility Pattern】
责任链模式定义: 为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。举例(文件上传给上级):上传的文件:/**上传的文件*/public class Files { private String fileName; private int level; public S...原创 2018-03-06 20:13:35 · 447 阅读 · 0 评论 -
设计模式18 - 访问者模式【Visitor Pattern】
访问者模式定义: 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。举例:(记账例子): 账本只有收入和消费类型,而访问者有多种,如老板和会计。/** * 账单接口,有接受访问者的功能 */interface Bill { void accept(AccountBookView viewer);}/*...原创 2018-03-07 19:42:01 · 415 阅读 · 0 评论 -
设计模式19 - 状态模式【State Pattern】
状态模式定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。举例(电梯例子,代码是最终结果): 分析:电梯类里面过多的判断状态,导致类十分庞大,所以分到不同状态的一系列类中去。/*** 定义一...原创 2018-03-13 20:14:46 · 401 阅读 · 0 评论 -
设计模式20 - 原型模式【Prototype Pattern】
原型模式定义: 用 原型实例 指定创建对象的种类,并且通过 拷贝这些原型 创建新的对象。举例(发邮件案例):public class Mail implements Cloneable{ //收件人 private String receiver; //邮件名称 private String subject; ...原创 2018-03-14 20:07:33 · 427 阅读 · 0 评论