二十三种设计模式随笔记录

合集下载

简述23种软件设计模式

简述23种软件设计模式

简述23种软件设计模式简述23种软件设计模式⼀、设计模式分类总体来说设计模式分为三⼤类:五种创建型模式:⼯⼚⽅法模式、抽象⼯⼚模式、单例模式、建造者模式、原型模式。

七种结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

⼗⼀种⾏为型模式:策略模式、模板⽅法模式、观察者模式、迭代⼦模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

⼆、设计模式概述创建型模式1.⼯⼚⽅法模式⼯⼚⽅法模式的创建是因为简单⼯⼚模式有⼀个问题,在简单⼯⼚模式中类的创建依赖⼯⼚类,如果想要拓展程序,必须对⼯⼚类进⾏修改,这违背了开闭原则,所以就出现了⼯⼚⽅法模式,只需要创建⼀个⼯⼚接⼝和多个⼯⼚实现类,⼦类可以⾃⼰决定实例化哪⼀个⼯⼚类,client类针对抽象接⼝进⾏编程,如果需要增加新的功能,继承⼯⼚接⼝,直接增加新的⼯⼚类就可以了,创建过程延迟到⼦类中进⾏,不需要修改之前的代码,满⾜了开闭原则,达到灵活地⽣产多种对象。

2.抽象⼯⼚模式抽象⼯⼚模式是提供⼀个创建⼀系列相关或相互依赖对象的接⼝,⽽⽆需指定它们具体的类。

区别于⼯⼚⽅法模式的地⽅,⼯⼚⽅法模式是创建⼀个⼯⼚,可以实现多种对象;⽽抽象⼯⼚模式是提供⼀个抽象⼯⼚接⼝,⾥⾯定义多种⼯⼚,每个⼯⼚可以⽣产多种对象。

前者的重点在于"怎么⽣产",后者的重点在于"⽣产哪些";前者是⼀个抽象产品类,可以派⽣出多个具体产品类,后者是多个抽象产品类,每个抽象产品类可以派⽣出多个具体产品类;前者的每个具体⼯⼚类只能创建⼀个具体产品类的实例,后者的每个具体⼯⼚类可以创建多个具体产品类的实例。

3.单例模式单例模式能保证⼀个类仅有⼀个实例,并提供⼀个访问它的全局访问点,同时在类内部创造单⼀对象,通过设置权限,使类外部⽆法再创造对象。

单例对象能保证在⼀个JVM中,该对象只有⼀个实例存在,这样做的好处就在于如果某些类创建⽐较频繁,特别是对于⼀些⼤型的对象,这是⼀笔很⼤的系统开销。

23种设计模式的通俗理解

23种设计模式的通俗理解

23种设计模式的通俗理解【转】1、FACTORY 工厂方法追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。

麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。

消费者任何时候需要某种产品,只需向工厂请求即可。

消费者无须修改就可以接纳新产品。

缺点是当产品修改时,工厂类也要做相应的修改。

如:如何创建及如何向客户端提供。

2、BUILDER 抽象工厂MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。

(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。

建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。

建造模式可以强制实行一种分步骤进行的建造过程。

3、FACTORY METHOD 建造者模式请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

4、PROTOTYPE 原型模式跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。

(100块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。

常见的二十三种设计模式

常见的二十三种设计模式

常见的⼆⼗三种设计模式按照⽬的来分,设计模式可以分为创建型模式、结构型模式和⾏为型模式。

创建型模式⽤来处理对象的创建过程;结构型模式⽤来处理类或者对象的组合;⾏为型模式⽤来对类或对象怎样交互和怎样分配职责进⾏描述。

创建型模式⽤来处理对象的创建过程,共以下五种:单例模式(Singleton Pattern)能避免同⼀对象被反复实例化。

⽐如说,访问数据库的连接对象就⽐普通对象实例化的时间要长;WCF中,维护服务器端远程对象的创建等,这类情况,很有必要⽤单例模式进⾏处理对象的实例化。

简单⼯⼚模式通过在⼯⼚类中进⾏判断,然后创建需要的功能类。

优点:不必使⽤具体的功能类去创建该类的实例。

缺点:新增⼀个功能类就需要在⼯⼚类中增加⼀个判断。

⼯⼚⽅法模式(Factory Method Pattern)把简单⼯⼚模式中的⼯⼚类,做了进⼀步的抽象为接⼝或抽象类,给各个功能创建⼀个对应的⼯⼚类,然后在这个⼯⼚类⾥⾯去创建对应的实例。

缺点:当新增⼀个功能类,就需要创建对于的⼯⼚类,相⽐简单⼯⼚模式,免去了判断创建那个具体实例,但会创建过多的类,还不如策略模式。

抽象⼯⼚模式(Abstract Factory Pattern)使⽤该功能类的功能类,利⽤抽象⼯⼚去创建该功能类的实例。

这样的好处在于尽可能的避免去创建功能的实例。

更⽜逼的做法就是使⽤反射去创建这个功能类的实例,在调⽤端就⼀点都不需要知道要去实例化那个具体的功能类。

这当然不是抽象⼯⼚模式独有的。

建造者模式(Builder Pattern)每个对象都具备⾃⼰的功能,但是,它们的创建⽅式却是⼀样的。

这个时候就需要中间这个建造者类来负责功能对象实例的创建。

在调⽤端只需调⽤特定的⽅法即可。

这个和策略模式有点类似。

原型模式(Prototype Pattern)创建好了⼀个实例,然后⽤这个实例,通过克隆⽅式创建另⼀个同类型的实例,⽽不必关⼼这个新实例是如何创建的。

原型模式使⽤时需要注意浅拷贝与深拷贝的问题。

软件设计师23种设计模式总结

软件设计师23种设计模式总结

1. Abstract Factory (抽象工厂)提供一个创建一系列相关或互相依赖对象的接口,而无须制定它们具体的类。

Abstract Factory 抽象工厂 class Program {static void Main(string[] args) {AbstractFactory factory1 = new ConcreteFactory1(); Client c1 = new Client(factory1); c1.Run();AbstractFactory factory2 = new ConcreteFactory2(); Client c2 = new Client(factory2); c2.Run();Console.Read();}abstract class AbstractFactory{public abstract AbstractProductA CreateProductA();public abstract AbstractProductB CreateProductB(); }class ConcreteFactory1 : AbstractFactory{public override AbstractProductA CreateProductA() {return new ProductA1();}public override AbstractProductB CreateProductB() {return new ProductB1();}}class ConcreteFactory2 : AbstractFactory{public override AbstractProductA CreateProductA() {return new ProductA2();}public override AbstractProductB CreateProductB() {return new ProductB2();}}abstract class AbstractProductA{}abstract class AbstractProductB{public abstract void Interact(AbstractProductA a); }class ProductA1 : AbstractProductA{}class ProductB1 : AbstractProductB{public override void Interact(AbstractProductA a)Console.WriteLine(this.GetType().Name +" interacts with " + a.GetType().Name);}}class ProductA2 : AbstractProductA{}class ProductB2 : AbstractProductB{public override void Interact(AbstractProductA a){Console.WriteLine(this.GetType().Name +" interacts with " + a.GetType().Name);}}class Client{private AbstractProductA AbstractProductA;private AbstractProductB AbstractProductB;// Constructorpublic Client(AbstractFactory factory){AbstractProductB = factory.CreateProductB();AbstractProductA = factory.CreateProductA();}public void Run(){AbstractProductB.Interact(AbstractProductA);}}2.Builder(生成器)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

面向对象23种设计模式

面向对象23种设计模式

面向对象23种设计模式面向对象23种设计模式在面向对象的编程中,设计模式是一种解决问题的通用方案。

设计模式可以帮助开发人员在开发过程中减少代码的冗余和复杂性,并提高代码的可维护性和可重用性。

本文将介绍23种面向对象的设计模式。

1. 工厂方法模式工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定实例化哪个类。

在工厂方法模式中,客户端不需要知道具体的创建逻辑,只需要知道工厂类中定义的接口即可。

2. 抽象工厂模式抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定它们的具体类。

在抽象工厂模式中,客户端不需要知道具体的创建逻辑,只需要知道工厂类中定义的接口即可。

3. 单例模式单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个访问该实例的全局点。

4. 原型模式原型模式是一种创建型设计模式,它允许复制或克隆一个现有的对象,而不必知道其具体实现。

5. 建造者模式建造者模式是一种创建型设计模式,它允许逐步创建复杂的对象,而不必知道其内部实现细节。

6. 适配器模式适配器模式是一种结构型设计模式,它将一个或多个不兼容的类或接口转换为客户端所需的接口。

7. 桥接模式桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离开来,以便独立地进行修改。

8. 组合模式组合模式是一种结构型设计模式,它将一组对象作为单个对象处理,以便客户端可以以相同的方式处理单个对象和组合对象。

9. 装饰器模式装饰器模式是一种结构型设计模式,它允许向现有对象添加额外的功能,同时不改变其现有的结构。

10. 外观模式外观模式是一种结构型设计模式,它为一组复杂的子系统提供了一个统一的接口,以便于客户端使用。

11. 享元模式享元模式是一种结构型设计模式,它利用共享技术来最小化内存使用,以及提高应用程序的性能。

12. 代理模式代理模式是一种结构型设计模式,它提供了一个代理对象,使得客户端可以通过代理对象间接地访问实际对象。

23种模式课堂笔记

23种模式课堂笔记

ResultSet rs = stmt.executeQuery();
3、抽象工厂(Abstract Factory)
EmpDAO saveEmp(Emp,emp) DeptDAO //数据库的访问 Dept getDept(int id); Oracle: OracleEmpDAOO implements EmpDAO MysqlEmpDAO implemetns EmpDAO MySQL: OracleDeptDAO implements deptDAO MySQLDeptDAO implemetns DeptDAO abstact DAOFactory { abstact EmoDAO getEmpDAO; abstact DeptDAO getDeptDAO; ststic DAOFactory(String type) { if("Mysql".equals(type)) { return MySQLDAOFactory(); }else if(...) { return OracleDAOFactory(); } } } MySQLDAOFactory extends DAOFactory { getEmpDAO {return new MySQLEmpDAO()} getDeptDAO {return new MySQLEmpDAO()} } OracleDAOFactory extends DAOFactory { getEmpDAO {return new OracleEmpDAO()} getDeptDAO {return new OracleEmpDAO()} }
package org.day01; import java.util.Calendar; public class Tes { public staic void main(String [] args) { CalendarCalendar = Calendar.getInstance();

二十三种设计模式修炼手册

二十三种设计模式修炼手册

二十三种设计模式修炼手册不知不觉,在开发这条道路上摸爬打滚也有些年头了,偶尔回头看看以前写的代码,真可谓粗糙至极。

当然了,那时候还是小白,代码写得难看些情有可原,不过现在可不能再用以前的标准去衡量自己了,因此掌握一些高级架构技巧是必须的,设计模式正是一个很好的敲门砖。

在我看来,设计模式不仅仅只是一套模板,要想掌握设计模式并做到举一反三,必须深入理解其中的思想,这个模式是为了解决什么问题?解决的思路是什么?代码的实现又如何?如果问题细节发生了微小的变化又该如何处理?所以说思考很重要,不能死记硬背,一定要多想。

写下这篇文章,是为了梳理自己的知识点,做个记录。

如果有来人看到了,并且对你有帮助的话,我也会很开心,因为知识是要传播的,大家都乐于分享自己的见解,才能共同进步。

设计模式的定义模式一词起源于建筑业,描述了解决问题的核心方法。

通过这种方式,可以多次重用那些已有的解决方案,无须重复相同的工作。

模式可以应用于不同的领域,软件模式是将模式的一般概念应用于软件开发领域,可以被认为是对软件开发中某一特定问题的解法的某种统一表示。

软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,在软件生存期的每一个阶段都存在着一些被认同的模式。

在软件模式领域,目前研究最深入的是设计模式。

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用这些设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

设计模式的基本要素设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和其他相关设计模式,其中的关键元素包括以下四个方面:模式名称:通过一两个词来描述模式的问题、解决方案和效果,以更好地理解模式并方便开发人员之间的交流。

问题:描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因。

有时候问题描述可能会包含使用该模式时必须满足的一系列先决条件。

关于23种设计模式的见解

关于23种设计模式的见解

关于23种设计模式的见解访问世纪流年BLOG站时看到的一段文字,对设计模式的解释很风趣,能够让人很快的了解其含义,学到了不少东西,以下是文章的内容:对设计模式很有意思的诠释,呵呵,原作者不详。

创建型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。

麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。

消费者任何时候需要某种产品,只需向工厂请求即可。

消费者无须修改就可以接纳新产品。

缺点是当产品修改时,工厂类也要做相应的修改。

如:如何创建及如何向客户端提供。

2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM 我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”buil der。

(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。

建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。

建造模式可以强制实行一种分步骤进行的建造过程。

3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

4、PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模式四个基本要素:1,模式名称;
2,问题;
3,解决方案;
4,效果。

SmallTalk MVC(三元组) :包括类的模型/视图/控制器
(Model/View/Controller)
Model : 应用对象;
View : Model在屏幕上的显示;
Controller : 定义用户界面对用户输入的响应方式。

储存响应机制。

MVC特征:1,“订购/通知”协议来分离模型和视图;
2,视图可以嵌套;
MVC的主要关系是由Observer, Composite, Strategy 三个设计
模式给出的。

列举二十三种设计模式的主要意图:
Abstract Factory : 提供一个创建一系列相关或相互依赖对象的接
口,而无需指定它们具体的类;
Adapter : 将一个类的接口转换成客户希望的另外一个接口;使得原本由于接口不兼容而不能一起工作的那些类能一起工作;Bridge : 将抽象部分与它的实现部分分离,使他们可以独立地变化;
Builder : 将一个复杂对象的构建与它的表示分离,使同样的构建过
程可以创建不同的表示;
(待续)
设计模式分类准则:目的准则(创建,结构,行为)
范围准则(类,对象)
面向对象程序由对象组成,对象包括数据和对数据进行操作的方法。

对象收到客户的请求后,执行相应的操作;客户请求
是使对象操作的唯一方法,操作又是对象改变内部数
据的唯一方法。

面向对象设计最困难的部分是将系统分解成对象集合。

(因素:封装,粒子,依赖关系,灵活性,性能,演化,复用)。

相关文档
最新文档