23种设计模式

23种设计模式概念

房东的猫 提交于 2019-12-10 22:31:03
23种设计模式概念 创建型模式 1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的套餐和肯德基的套餐都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“两个B套餐”就行了。麦当劳和肯德基就是B套餐的Abstract Factory, B套餐里含有汉堡, 鸡翅和饮料. 麦当劳或肯德基会根据B套餐的规格, 让汉堡Factory, 鸡翅Factory, 饮料Factory分别生产对应B套餐的材料. 抽象工厂模式:客户类和工厂类分开。消费者任何时候需要某套产品集合时,只需向抽象工厂请求即可。抽象工厂会再向具体的工厂生产出符合产品集规格的产品. 2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖) 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 3、FACTORY METHOD

23种设计模式(5):原型模式

帅比萌擦擦* 提交于 2019-12-10 05:02:38
定义: 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型: 创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 实现代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class Prototype

Java设计模式:23种设计模式全面解析(超级详细)

孤人 提交于 2019-12-06 14:19:28
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 1995 年, GoF (Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。 这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解。 当然,软件设计模式只是一个引导,在实际的软件开发中,必须根据具体的需求来选择: 对于简单的程序,可能写一个简单的算法要比引入某种设计模式更加容易; 但是对于大型项目开发或者框架设计,用设计模式来组织代码显然更好。 关于本教程 本教程虽然命名为“Java设计模式”,但是设计模式并不是 Java 的专利,它同样适用于 C++、C#、JavaScript 等其它面向对象的编程语言。 Java 是典型的面向对象的编程语言,所以本教程以 Java 为基础来讲解这 23 种设计模式,如果你不了解 Java,请猛击《 Java教程 》学习。 教程目录:1. 软件设计模式概述 2. GoF 的 23 种设计模式的分类和功能 3. UML中的类图及类图之间的关系 4. 开闭原则

23种设计模式桥连模式Bridge

两盒软妹~` 提交于 2019-12-04 05:42:47
重点内容 1.什么是桥梁模式 2.哪些地方用到桥梁模式 3.桥梁模式的优点 桥梁模式 :(bridge)又称桥接模式,属于结构型。主要考虑对象结构,对象之间的依赖关系等 通用类图: 哪些地方用到桥梁模式? 由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。这样可以考虑到桥接模式 Eg:通过cpu 和品牌可以判定电脑的优劣。那么三者之间的关系可以使用桥接模式进行描述(这样说有些牵强) 下面贴上源码: public class Client { /** * @param args */ public static void main ( String [ ] args ) { // intel IcpuAvaliable iAvaliable = new IntelCpuIml ( ) ; AbComputerBrank abComputerBrank = new MacComputer ( iAvaliable ) ; abComputerBrank . checkComputer ( ) ; iAvaliable = new AmdCpuIml ( ) ; abComputerBrank = new MacComputer ( iAvaliable ) ; abComputerBrank . checkComputer

GOF 23种设计模式——桥接模式(Bridge)

 ̄綄美尐妖づ 提交于 2019-12-04 05:42:01
桥接模式(Bridge)是一种结构型设计模式。 定义: 桥接模式将抽象部分与实现部分分离,使他们都可以独立的进行变化。 主要特点: 把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。 桥接模式的UML图如下: 桥接模式的角色和职责: 1. Client 调用端 这是Bridge模式的调用者。 2. 抽象类(Abstraction) 抽象类接口(接口这货抽象类)维护队行为实现(implementation)的引用。它的角色就是桥接类。 3. Refined Abstraction 这是Abstraction的子类。 4. Implementor 行为实现类接口(Abstraction接口定义了基于Implementor接口的更高层次的操作)。 Implementor定义实现部分的接口,该接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同。一般来说,Implementor接口仅提供基本操作,而Abstraction则定义基于这些基本操作的较高层次的操作。 5. ConcreteImplementor Implementor的子类。 使用场景 举个栗子 注意:这里的抽象部分和实现部分只是两个独立变化的维度,独立变化。 我们平常喝咖啡的时候分别有大杯小杯的,还有加糖和不加糖的

23种设计模式(C++)之 桥接(Bridge)模式

◇◆丶佛笑我妖孽 提交于 2019-12-04 05:41:48
23种设计模式(C++)之 桥接(Bridge)模式 23种设计模式(C++)之 桥接(Bridge)模式 意图 场景 角色 实例 23种设计模式(C++)之 桥接(Bridge)模式 意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 场景 比如,画图工具中铅笔的粗细和颜色。假设有三种粗细(0.5mm, 0.8mm, 1.0mm)和四种颜色(红,黄,蓝,黑),如果粗细与颜色合在一起,我们则需要准备十二个类来实现所有情况;如果粗细与颜色分开,我们只需要准备七个类即可实现所有情况。 角色 Abstraction: 定义抽象类的接口 维护一个指向Implementor类型对象的指针 RefinedAbstraction 扩充由Abstraction定义的接口。 Implementor 定义实现类的接口, 供RefinedAbstraction调用。该接口不一定要与Abstraction的接口完全一致。一般,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些操作的较高层次的操作。 ConcreteImplementor 实现Implementor 接口并定义它的具体实现。 实例 以车为例,车可分为电动车和油动车,又可分为白色车和黑色车。 定义实现类接口 class CarColor { public : virtual void

23种设计模式之桥接模式(Bridge)

ⅰ亾dé卋堺 提交于 2019-12-04 05:40:39
23种设计模式之桥接模式(Bridge) 桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式类似于多重继承方案,但是多重继承方案往往违背了类得单一职责原则,其复用性比较差,桥接模式是比多重继承方案更好的解决方法。 优点: 1)可以将接口与实现相分离。 2)提高了可扩展性。 3)对客户端隐藏了实现的细节。 使用场景: 1)想避免在抽象及其实现之间存在永久的绑定。 2)抽象及其实现可以使用子类进行扩展。 3)抽象的实现被改动应该对客户端没有影响,不用重新编译代码。 Bridge 模式 /// <summary> /// 像素矩阵类 /// </summary> public class Matrix { } public abstract class Image { public void SetImp(ImageImp imp) { this.imp = imp; } public abstract void ParseFile(string fileName); protected ImageImp imp; } public abstract class ImageImp { public abstract void doPaint(Matrix m);/

23种GoF设计模式概述

旧巷老猫 提交于 2019-12-04 04:59:20
23种GoF设计模式概述 在前面,我们对 GoF 的 23 种设计模式进行了分类,这里先对各个设计模式的功能进行简要介绍,以便有个大概了解。后面的章节再进行详细介绍。 创建型模式 关注于怎么创建对象的创建型模式,他们将对象的创建与使用相互分离,对象的使用者无需关心如何创建对象,只知道怎么使用就行,以降低耦合度。犹如汽车使用人无需关注汽车是怎么造出来一样,只要知道怎么使用就行。下面这5种模式就是属于这一类。 单例(Singleton)模式:控制某个类只能自行生成一个可供外部全局访问的实例。例如:Windows的窗口管理器或者任务管理器都是只有一个实例。 原型(Prototype)模式:将一个创建成本高(如:装载大文件、初始化耗时长、CPU资源占用多等)的对象作为原型,通过对其进行复制或者克隆,来创建其他类似的新实例。 抽象工厂(Abstract Factory)模式:由继承自抽象工厂类的具体工厂分别来创建有相同联系的多个不同产品。例如不同的培训学校,可以创建课程和课程所用的教材。 建造者(Builder)模式:针对一个复杂对象,它的构建需要很多步骤和部件,将这种对象拆解成多个相对简单的构成部件或者步骤,然后再根据需要分别构建他们,直到得到该复杂对象。例如:快餐店的套餐,他的构造分别由汉堡、饮料、薯条构成,这就要求建造或制作者分别创建各种物品,然后返回一个完整的套餐给点餐人员。

23种常用的设计模式

别等时光非礼了梦想. 提交于 2019-12-03 14:02:12
23种设计模式总体可以分为三类: 一、创建型模式    工厂模式、抽象工厂、单例模式 、建造者模式、原型模式 二、结构型模式    装饰器模式、适配器模式、代理模式 、外观模式、桥接模式、组合模式、享元模式 三、行为型模式    策略模式、观察者模式、模板方法模式 、责任链模式、迭代子模式、备忘录模式、命令模式、访问者模式、中介者模式、状态模式、解释器模式 下面主要介绍以上9种红色字体的设计模式。 (1)工厂模式:定义一个创建对象的接口,让子类决定具体实例化哪一个对象。 public interface Sender{ void sender(); } public class SenderFactory{ //创建简单工厂 public Sender produce(String type){ if(type.equals("mail")){ return new MailSender(); }else if(type.equals("msg")){ return new MsgSender(); }else{ return null; } } } (2)抽象工厂:为一组相关或相互依赖的对象提供一个接口,且无需指定他们的具体实现类。 //定义实现功能的接口 public interface Sender{ void sender(); } //定义生产工厂的接口

23种设计模式――工厂模式

匿名 (未验证) 提交于 2019-12-03 00:22:01
简历不要乱写 血的教训当时我也就是看过工厂模式然后简历就写了熟悉工厂模式,这狗命第一道题就是知道什么是工厂模式吗?就简单说了一个什么是工厂模式没说简单工厂,抽像工厂什么的丢人了。 1、工业革命以前,人们要是想造一个车,然后就自己做个车就结束了。(类似于正常的自己创建类) 2、工业革命以后出现了工厂,你还是想造一个车,然后就告诉工厂你想造什么车,工厂就你造出车子( 简单工厂模式) 3、生活水平上来了,不同的客户想要不同的车系 每一个车系都有一个厂子类,但是他们还都属于汽车厂这个抽象,你指定某一个具体的厂子 ,他就会给你生产出具体的车系。(工厂方法模式) 一、简单工厂模式 1、产品 } Tesla } ( ) { 2、工厂 public class Factory { { } 3、客户类 public class Customer { Tesla m } 二、工厂方法模式 1、产品 } Tesla } ( ) { 2、工厂 interface FactoryTesla { } } 3、客户 public class Customer { public static void main(String[] args){ } 三、抽象工厂模式 1、产品类 //发动机 public interface Engine { public class EngineA extends Engine {