适配器设计模式的适应场景: 一般情况是上端固定,下端固定,下端功能不满足或跟上端不协调,使用适配器重新包一层(继承适配器接口,以满足上端需求,继承下层类,以调用方法),使下端代码能满足上端需求(欺骗,强行满足),即类适配器 public class MyLuceneAdapter : MyLucene, ISqlHelper { public void Add() { base.Add(); } public void Delete() { base.Delete(); } public voi…
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的脉络: 设计与模式 5 大设计原则 7 种常见的设计模式 一句话解释含义 列举生活中的场景 . 业务代码场景 js 代码演示 设计与模式 之前一直以为「设计模式」是一个完整的名词 其实「设计」和「模式」是要分开来说的 「设计」:5 个常见的设计原则 「模式」:代码中常见的"套路",被程序员…
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整个应用程序的生命周期是一样的,所以可以定义一个私有的静态全局变量instance来保存该类的唯一实例 必须提供一个全局函数访问获得该实例,并且在该函数提供控制实例数量的功能(返回该对象的实例,也必须是静态的方法,不然无法调用静态的实例) 简单来说:单例模式就是保证在整个应用程序的生命周期中,在任何时…
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模式所描写叙述的问题,就能够直接用对应的解决方法去解决问题,这就是设计模式. 设计模式就是抽象出来的东西.它不是学出来的,是用出来的:也许你根本不知道不论什么模式.不考虑不论什么模式.却写着最棒的代码,即使以"模式专家"的角度来看,都是最佳的设计.不得不说是"最佳的模式实践&quo…
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuable Object-Oriented Software>中的定义是:Ensure a class only has one instance,and provide a globa…
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为频繁,通常做为学习其他工厂模式的入门. 接下来我们从一个虚构的业务场景遇到的问题开始,到如何使用简单工厂模式去解决这个业务场景的问题的角度,来介绍这个模式. 2. 具体业务 有一个图表类,可以在实例化的时候根据传入的参数创建不同的图表类型,比如柱状图.饼状图.折线图等等. 2.1 业务代码 /**…
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,这将违背"开闭原则". 本篇将要介绍的工厂方法模式可以规避这个缺点. 2. 工厂方法模式 工厂方法模式又简称为工厂模式,又可称作虚拟构造器模式或多态工厂模式.工厂方法模式是一种创建型模式. 2.1…
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题, 但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销. 此时,我们可以考虑将一些相关的产品组成一个"产品族",由同一个工厂来统一生产.这就是抽象工厂模式的基本思想. 2. 模拟业务 开发一套界面皮肤库,用户在使用时可以通过菜单来选择皮肤…
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯一的,多次打开任务管理器,始终只能弹出一个唯一的任务管理器. 这么做的理由有两个: 节约资源 避免多个实例数据不一致问题 1.1 节约资源 如果能弹出多个窗口,且这些窗口的内容完全一致,全部是重复对象,这势必会浪费系统资源,任务管理器需要获取系统运行时的诸多信息,这些信息的获取需要消耗一定的系统资源…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇),通过简单工厂模式的了解,它的缺点就是随着需求的变化我们要不停地修改工厂里 上一篇文章我们讲了工厂方法模式,它是为了解决简单工厂模式所面对的问题:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越 多,其逻辑越复杂,同时这样的修改也不符合开放闭合原则OCP--对增加…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7567880.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇),通过简单工厂模式的了解,它的缺点就是随着需求的变化我们要不停地修改工厂里 面的方法的代码,需求变化越多,里面的if--else也越多,这样就会造成简单工厂的实现逻辑过于复杂. 依设计原则里的开闭原则--对增加代码开放,对修改代码关闭,我们不能总是这样修改简单工厂里面的方法. 下…
接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要实现的方法 按照接口隔离原则,将接口Interface1拆分成若干个独立的接口(如图可得拆分成3个),类A和类C分别与他们需要的接口建立依赖关系 应用实例 没有使用接口隔离原则 public class…
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则,只有类方法数量足够少,才可以在方法级别保持单一职责原则 初学者写法 public class SingleResponsibility01 { public static void main(String[] args) { Vehicle vehicle =new Vehicle();…
设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) 2.可读性(即:编程规范性,方便程序员读懂代码) 3.可扩展性(即:当需要增加新的功能时,非常方便,称为可维护) 4.可靠性(即:当我们增加新功能后,对原功能没有影响) 5.使程序员呈现搞内聚,低耦合的特性 设计模式的七大原则 1.单一职责原则 2.接口隔离原则 3.依赖倒转原则 4.里氏替换原则…
单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式(Adapter Pattern) 命令模式(Command Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 模版模式(Template Pattern) 状态模式(State Pattern) 后续将持续发布学习笔记,学习资料参考来源于…
<马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory,CarFactory,PlaneFactory),方便产品维度的扩展,但生产系列产品不方便,且易工厂灰泛滥 4.抽象工厂模式(例子:三星工厂.海尔工厂)方便生产系列产品,但增加新产品时,要修改AbstractFactory等多处地方 5.观察者模式(例子:父亲.爷爷监听小孩;模拟awt的button) 6.…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7640873.html,记录一下学习过程以备后续查用. 一.引言 从今天开始我们开始讲结构型设计模式,结构型设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.     创建型设计模式解决的是对象创建的问题,而结构型设计模式解决的是类和对象组合关系的问题. 今天我们开始讲结构型设计模式里面的第一个设计模式:适配器模式.适配器模式其实很简单,在现实生活中有很多这样的实例…
最近一直在看<Head First设计模式>,这本书写的确实是很不错的,专注于怎么用最简单的方式最通俗的语言让人了解设计模式.据说GoF的设计模式那本书写的很好,是一本经典,但是就是难懂,这本书应该就是我们这些一看经典书就困的人的宝贝了. 不过Head First系列并不专注于写代码,我就把自己学习的时候写出来的代码贴在这里当做笔记吧,也方便搜到的人参考. 单例模式是我遇到的最多的模式了,这种模式大部分被利用在数据库编程中,因为涉及到资源分配等原因,单例模式是一种非常好的模式. 下面是一段我实…
设计模式的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域.在<建筑的永恒方法>一书中是这样描述模式的: 模式是一条由三个部分组成的通用规则:他表示一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计. 软件领域的设计模式也有类似的定义:设计模式是对处于特定环境下,经常出现的某类软件开发…
开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的笔记,记录下来,只记干货. 第一部分:单例模式的内容 单例模式:类只能有一个实例. 类的特点:1.私有构造器:2.内部构造实例对象:3.对外提供获取唯一实例的public方法. 常见的单例模式实现有五种形式: 1.饿汉式. 2.懒汉式. 3.双重检查锁式. 4.静态内部类式. 5.枚举式. 以下分别…
创建型模式:关注对象的创建过程 1.单例​模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高,但是可以延时加载) 其他: 双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题.不建议使用) 静态内部类式(线程安全,调用效率高.但是可以延时加载) 枚举单例(线程安全,调用效率高,不能延时加载) 2.工厂模式: 简单工厂模式:用来生产同一等级结构中的任意产品(对已有产品新增功能,需要修改源代码)…
设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域.在<建筑的永恒方法>一书中是这样描述模式的: 模式是一条由三个部分组成的通用规则:他表示一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计. 软件领域的设计模式也有类似的定义:设计模式是对处于特…
前言 大约在一年前学习过一段时间的设计模式,但是当时自己的学习方式比较低效,也没有深刻的去理解.运用所学的知识. 所以现在准备系统的再重新学习一遍,写一个关于设计模式的系列博客. 废话不多说,正文开始. 1. 设计模式是什么 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式是为了可重用代码.让代码更容易被他人理解并且保证代码可靠性. 2. 学习设计模式的好处 提高开发效率,使用设计模式可以避免我们做一些重复工作 减少开发人员的沟通成本. 阅读源码,更深入的…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8135083.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第九个模式--访问者模式.如果按老规矩,先从名称上来看这个模式,我根本不能获得任何对理解该模式有用的信息, 而且这个模式在我们的编码生活中使用的并不是很多.该模式的意图定义很抽象,第一次看了这个定义其实和没看没有什么区别,一头雾水.为了让大家 更好的理解该模式的初衷,我们举个例子来说明模式.比如:当客户提出一个新的…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8032683.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第六个模式--状态模式.无论是现实世界,还是面向对象的OO世界,里面都有一个东西,那就是对象.有对象当然就有 状态了.每个对象都有其对应的状态,而每个状态又有对应一些相应的行为.在不同状态下,行为的的方式也是不一样.如果某个对象有多个状态时,那 么就会有很多对应的行为.对这些状态的判断以及依状态完成的行为,会导致多…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7903617.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第三个模式--迭代器模式,先从名字上来看.迭代是遍历的意思,迭代器可以理解为是遍历某某的工具,遍历什么呢?在软 件设计中,当然遍历的是集合对象,所以说迭代器模式是遍历集合的一种通用的算法.如果集合只有一种类型,那这个模式就没用了,就是因为集合对象包含 数组.列表.字典和哈希表等各种对象.如果为每一种集合对象都实现一…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7814004.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第七个模式,也是结构型设计模式中的最后一个模式--代理模式.先从名字上来看,“代理”可以理解为“代替”,代替“主人” 做一些事情.为什么需要“代理”?是因为某些原因(比如:安全方面的原因),不想让“主人”直接面对这些繁琐.复杂的问题,但是这些事情是经“主人”同意 或者授意的,如同“主人”亲自完成的一样.这个模式很简…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第六个模式--享元模式,先从名字上来看,“享元”可以这样理解--共享“单元”.单元是什么呢?举例说明:对于图形而言就 是图元:对于英文来说就只26个英文字母:对于汉语来说就是每个汉字.也可以这样理解“元”--构成事物的最小单元,这些单元如果大量且重复出现,我们可 以缓存重复出现的单元,达到节省内存的目的.换个说法享…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7699301.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第二个模式--桥接模式,也有叫桥模式的.桥在我们现实生活中经常是连接着A地和B地,再往后来发展,桥引申为一种纽 带,比如,丝绸之路是连接亚洲和欧洲的桥梁.有了桥,我们出行更方便了,不需要绕路或搭船.针对桥的使用环境来说,桥解决了跨越和衔接的问题.在 设计模式中的桥接模式也有类似的概念,是连接了两个不同维度的东西,而…
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7640873.html,记录一下学习过程以备后续查用.  一.引言 很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对象都是实际 存在的,每个对象都有自己独立的内存地址且会被GC回收.如果就浅拷贝来说,可能会公用一些字段(引用类型),但深拷贝是不会的.所以说原型设计模式会 提高内存使用率是不一定的,具体还要看当时的设计,如果拷贝出来…