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了。
23种设计模式(一)---简单工厂设计模式
23种设计模式(⼀)---简单⼯⼚设计模式简单⼯⼚设计模式---透彻讲解⼀. 什么是⼯⼚理解简单⼯⼚设计模式, ⾸先要理解什么是⼯⼚. 我们⾝边有很多⼯⼚. 酿酒的酒⼚, 制⾐的⾐⼚, 加⼯⾁类的⾁加⼯⼚等等. 这些⼯⼚他们到底是怎么酿酒的? 怎么制⾐的?怎么加⼯⾁的? 我们并不知道, 也不需要知道. 不知道并不影响我们喝酒, 穿⾐, 吃⾁. 这就是⼯⼚的特点之⼀: 客户不需要知道怎么做的, 但是不影响使⽤再来看看⼯⼚的第⼆个特点: ⽐如⾁加⼯⼚---双汇. ⽜⾁进去出来⽜⾁⽕腿肠, ⽺⾁进去出来⽺⾁⽕腿肠, 猪⾁进去出来猪⾁⽕腿肠. 我不需要知道怎么加⼯的, 我只需要把材料扔进去, 然后对应的⽕腿肠就出来了. 这就是第⼆个特点: 给你材料, 你去制造出我想要的东西, ⾄于怎么做,我并不关⼼.程序中的⼯⼚也是⼀样的思想. **⼯⼚的作⽤就是创造对象. **⼆. 简单⼯⼚设计模式2.1. 设计模式我们基本都知道设计模式有23种, 说到这, 我们先来说说设计模式。
设计模式不是语法, ⽽是⼀种巧妙的写法, 能够把程序变得更加灵活的写法.设计模式有三种: 创建型, ⾏为型, 结构型. 简单⼯⼚设计模式属于创建型. 但简单⼯⼚设计模式不属于23种设计模式范围内, 属于23种设计模式中⼯⼚设计模式⾥最简单的⼀种.2.2. 简单⼯⼚设计模式简单⼯⼚设计模式, ⼜叫做静态⼯⼚设计模式. 简单⼯⼚设计模式提供⼀个创建对象实例的功能,⽽⽆需关系其具体实现,被创建实例的类型可以是接⼝、抽象类,也可以是具体的类。
2.3. 简单⼯⼚设计模式的4要素这个很重要, 这也是创建⼀个简单⼯⼚的步骤1. API接⼝: 创建⼀个API接⼝或抽象类2. Impl实现类: ⼀个或多个实现API接⼝/抽象类的类3. ⼯⼚: 定义⼀个⼯⼚, ⽤来创建API接⼝类对象4. 客户端: ⽤来调⽤⼯⼚创建API接⼝或抽象类的客户端2.4 简单⼯⼚结构类型及说明以上类型就描述了⼀个简单⼯⼚创建的整个过程第⼀步: 定义API接⼝或抽象类, 并定义⼀个operate操作⽅法第⼆步: 定义API的实现类, 每个实现类单独实现operate⽅法第三步: 定义⼯⼚类. ⼯⼚类依赖API接⼝和API的实现类, 简单⼯⼚设计模式是创建型的, 通常是⽤来创建实体类. 因此我们定义⼀个create⽅法, 来创建实例对象,⼊参通常是⼀个指定的类型第四步: 定义客户端. 客户端传⼊⼀个指定的类型给⼯⼚, ⼯⼚就会创建出对应的实现类.2.5 简单⼯⼚模板代码第⼀步: 制⾐⼚API接⼝package com.lxl.www.designPatterns.simpleFactory.demo;public interface IClothes {void operate();}第⼆步: 制⾐⼚API实现类ManClothes: 制作男⼠⾐服package com.lxl.www.designPatterns.simpleFactory.demo;public class ManClothes implements IClothes{@Overridepublic void operate() {System.out.println("制作男⼈的⾐服");}}WomenClothes: 制作⼥⼠⾐服package com.lxl.www.designPatterns.simpleFactory.demo;public class WomenClothes implements IClothes{@Overridepublic void operate() {System.out.println("制作⼥⼈的⾐服");}}ChildClothes: 制作⼉童⾐服package com.lxl.www.designPatterns.simpleFactory.demo;public class ChildClothes implements IClothes{@Overridepublic void operate() {System.out.println("制作⼉童的⾐服");}}第三步: 定义⼯⼚, 并创建⾐服类接⼝package com.lxl.www.designPatterns.simpleFactory.demo;/*** 制⾐⼯⼚*/public class ClothesFactory {public static IClothes createClothes(String type) {if (type.equals("男⼈")) {return new ManClothes();} else if (type .equals("⼥⼈")) {return new WomenClothes();} else {return new ChildClothes();}}}第四步: 定义客户端, 指定制⾐类别, 制⾐.public static void main(String[] args) {IClothes manClothes = ClothesFactory.createClothes("男⼈");manClothes.operate();}2.6 简单⼯⼚命名建议类命名建议为“模块名称+Factory”,⽐如,⽤户模块的⼯⼚就称为UserFactory, 制⾐⼯⼚: ClothesFactory⽅法名称通常为“get+接⼝名称”或者是“create+接⼝名称”。
最新23种设计模式详解及实现方式
Builder模式示例
2.抽象生成器(Builder): Builer.java import.javax.swing.*; public interface Builder{
public abstract void buildButton(); public abstract void buildLabel(); public abstract void buildTextField(); public abstract JPanel getPanel(); }
panel=new PanelProduct(); } public void buildButton(){
panel.button=new JButton("按钮"); } public void buildLabel(){
bel=new JLabel("标签"); } public void buildTextField(){
Builder模式示例
4.指挥者(Director):Director.java import javax.swing.*; public class Director{
private Builder builder; Director(Builder builder){
this.builder=builder; } public JPanel constructProduct(){
23种设计模式详解及实现方式
场景—翻译机
MM最爱听的就是"我爱你"这句话了,见到不同 地方的MM,要能够用她们的方言跟她说这句话 哦,我有一个多种语言翻译机,上面每种语言 都有一个按键,见到MM我只要按对应的键, 它就能够用相应的语言说出"我爱你"这句话了, 国外的MM也可以轻松搞掂,这就是我的"我爱 你"builder。(这一定比美军在伊(ConcreteBuilder)_2:ConcreteBuilderTwo.java import javax.swing.*; public class ConcreteBuilderTwo implements Builder{
23种设计模式额形象比喻 (1)
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块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。
23种设计模式简单实例
23种设计模式简单实例设计模式是解决软件设计中常见问题的经典解决方案,它们被广泛应用于软件工程中。
本文将介绍23种设计模式,并提供每种模式的简单实例来帮助读者更好地理解和应用这些模式。
1. 创建型模式(Creational Patterns)1.1 简单工厂模式(Simple Factory Pattern):一个工厂类根据传入的参数决定创建哪一种产品类的实例。
例如,一个汽车工厂根据参数创建不同型号的汽车。
1.2 工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。
例如,一个汽车品牌父类提供创建具体汽车型号的方法,由子类决定具体型号。
1.3 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。
例如,一个汽车制造工厂提供创建汽车引擎和轮胎的方法。
1.4 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
例如,一个套餐包括饮料、主食和甜品等多个组件,可以通过建造者模式逐步构建套餐。
1.5 单例模式(Singleton Pattern):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
例如,一个日志管理器只能有一个实例,可以通过单例模式实现。
2. 结构型模式(Structural Patterns)2.1 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口。
例如,将一个新的USB设备适配到旧的电脑接口上。
2.2 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。
例如,一个画图软件可以通过装饰器模式给图形对象添加边框或阴影等功能。
2.3 代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。
24种设计模式及案例
24种设计模式及案例设计模式是软件工程中经过验证的解决其中一类常见问题的可复用设计的描述。
它们提供了一套经过验证的最佳实践,可以帮助开发人员解决各种设计问题,并提高代码的可维护性、重用性和灵活性。
本文将介绍24种常见的设计模式,并为每种模式提供一个案例,以便更好地理解和应用这些设计模式。
1.创建型模式:- 简单工厂模式(Simple Factory Pattern):通过一个工厂类根据输入参数的不同来创建不同类的对象。
- 工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,但让子类决定实例化哪一个类。
- 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。
- 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局的访问点来获取该实例。
2.结构型模式:- 适配器模式(Adapter Pattern):将不兼容的接口转换为可兼容的接口,以便不同类之间可以协同工作。
- 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,而不需要修改原始类的代码。
- 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对该对象的访问。
- 外观模式(Facade Pattern):提供了一个简化接口,用于使用一组复杂子系统的更高级别接口。
3.行为型模式:- 策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并使它们可以互相替换。
- 观察者模式(Observer Pattern):定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,其所有依赖对象都会收到通知并自动更新。
- 模板方法模式(Template Method Pattern):定义了一个操作的算法框架,而将一些步骤的实现延迟到子类中。
23种设计模式范文
23种设计模式范文设计模式是软件开发中常用的解决方案模式,它们代表了在面对特定问题时的最佳实践和经验总结。
设计模式可以帮助我们更好地组织和设计代码,提高代码的可读性、可维护性和可扩展性。
在本文中,我们将介绍23种常用的设计模式,并分别讨论它们的实现原理和在实际开发中的应用场景。
1. 单例模式(Singleton Pattern)单例模式是最简单的设计模式之一,它确保一个类只有一个实例,并提供一个全局访问点。
在实现上,可以通过将构造函数私有化,然后提供一个静态方法返回实例来实现单例。
应用场景:在需要实现全局唯一访问点的场景下,比如线程池、配置管理器等。
2. 工厂模式(Factory Pattern)工厂模式是用来创建对象的一种模式,它将对象的创建和实现分离,使得代码更易于维护和扩展。
工厂模式有简单工厂模式、工厂方法模式和抽象工厂模式等几种不同的变体。
应用场景:在需要根据不同条件创建不同对象的场景下,比如数据库连接、日志记录等。
3. 抽象工厂模式(Abstract Factory Pattern)抽象工厂模式是工厂模式的一种扩展,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定实际的类。
抽象工厂模式将一组工厂类封装起来,使其可以交换或者替换。
应用场景:在需要创建一组相关对象(如界面主题、操作系统等)并且需要保持一致性的场景下。
4. 建造者模式(Builder Pattern)建造者模式是用来生成复杂对象的一种模式,它将对象的构建与其表现分离,采用逐步构建的方式生成对象,可以让客户端不需要知道具体的构建细节。
应用场景:在构造过程比较复杂,需要多个组件协同工作的场景下,比如构建复杂的UI界面。
5. 原型模式(Prototype Pattern)原型模式是用来克隆对象的一种模式,它通过复制已有对象的原型来创建新的对象,避免了通过构造函数创建对象和初始化成员变量的重复过程。
应用场景:在需要创建大量相似对象或者初始化成本较高的对象时,可以使用原型模式。
23种(只有常用的十种)应用场景举例(详细)
目录1【装饰模式应用场景举例】 ......................................................................................................... 1 2【策略模式应用场景举例】 ......................................................................................................... 5 3【代理模式应用场景举例】 ......................................................................................................... 8 4【外观模式应用场景举例】 ....................................................................................................... 12 5【抽象工厂模式应用场景举例】 ............................................................................................... 14 6【观察者模式应用场景举例】 ................................................................................................... 22 7【建造者模式应用场景举例】 ................................................................................................... 27 8【原型模式应用场景举例】 ....................................................................................................... 32 9【工厂方法模式应用场景举例】 ............................................................................................... 35 10【模板方法模式应用场景举例】 ............................................................................................. 401【装饰模式应用场景举例】 【 】比如在玩“极品飞车”这款游戏,游戏中有对汽车进行喷涂鸦的功能,而且 这个喷涂鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,假设 现在喷涂鸦具有 2 种样式: (1) 红色火焰 (2) 紫色霞光如果使用“继承父类” 设计这样的功能,那么类图就像如下的这样:从图中可以看到使用继承来实现这种功能,并且是 2 种涂鸦样式,就需要创 建 4 个子类,如果喷涂鸦有 3 种,4 种呢?这种情况就是典型中学课程学习过的 “排列与组合”,那简直就是“Head First 设计模式”书中讲的“类爆炸”。
23种设计模式的代码实现
23种设计模式的代码实现一、单例模式单例模式(Singleton Pattern)是指一个类只允许创建一个实例,并且提供全局访问点。
在Java应用中,单例模式最常见的用途是一些全局变量或者全局配置信息,它们需要被访问和使用,但又需要被控制当只有一个对象时只被实例化一次。
下面的代码实现了一个单例模式的类,这个类负责创建唯一的对象,并提供一个getInstance方法,允许外界访问这个唯一的对象。
public class Singleton//静态变量存放唯一的单例对象private static Singleton instance;//私有构造方法,禁止外部创建对象private Singleton({};//外界访问唯一实例的公有方法public static Singleton getInstanceif (instance == null)instance = new Singleton(;}return instance;}//其它方法,用于操作唯一的实例public void doSomething//do something}二、工厂模式工厂模式(Factory Pattern)是指定义一个创建对象的接口,而且让子类决定要实例化的类。
下面是一个使用工厂模式的示例,该示例定义了一个接口Product和两个实现类ProductA和ProductB,它们分别用于创建A和B类型的产品。
接口Product定义了产品的公共接口,实现类ProductA和ProductB分别实现其接口,同时,定义一个工厂类ProductFactory,它根据传入的参数来创建不同类型的产品。
interface Productpublic void doSomething(;class ProductA implements Productpublic void doSomethinSystem.out.println("ProductA doSomething");}class ProductB implements Productpublic void doSomethinSystem.out.println("ProductB doSomething");}class ProductFactorypublic static Product createProduct(String type) Product product = null;if (type.equals("A"))。
23种设计模式的经典运用
23种设计模式的经典运用介绍设计模式是解决软件设计中常见问题的可重复使用的解决方案。
本文将介绍23种经典的设计模式,并给出它们在实际开发中的应用示例。
通过学习这些设计模式,您将增加对软件设计的理解,并能够更好地解决问题。
创建型设计模式1.工厂方法模式(F a c t o r y M e t h o d)工厂方法模式通过定义一个创建对象的接口,但由子类决定实例化具体类。
这种方法可以延迟实例化过程,具有更高的灵活性和可扩展性。
应用场景:-在一个系统中,希望客户端与具体类的实例化解耦。
-希望通过增加具体类的扩展来增加系统的灵活性。
2.抽象工厂模式(A b s t r a c t F a c t o r y)抽象工厂模式提供一个接口,用于创建相关或依赖对象组。
这种模式将对象的实例化推迟到子类中,从而实现了解耦。
应用场景:-当一个系统独立于其产品的创建、组合和表示时。
-当需要一个系列的相互依赖的对象而无需指定其具体类时。
3.单例模式(S i n gl e t o n)单例模式确保一个类只有一个实例,并提供一个全局访问点。
这种模式常用于控制对资源的访问,例如数据库连接或日志文件。
应用场景:-当需要一个类的唯一实例,并且该实例需要被多个客户端共享时。
-当需要限制系统中特定类的实例数量时。
4.原型模式(P r o to t y p e)原型模式通过复制现有对象来创建新对象。
这种模式对于创建需要消耗大量资源的对象非常有用,可以通过克隆现有对象来提高性能。
应用场景:-当一个系统的某些对象的创建比较昂贵时。
-当需要避免构造函数调用,而直接通过复制现有对象来创建新对象时。
5.建造者模式(B ui l d e r)建造者模式将一个复杂对象的构建过程与其表现分离,使得相同的构建过程可以创建不同的表现。
应用场景:-当想要构建一些复杂对象时,如生成器。
-当需要创建对象的过程具有多个步骤,并且每个步骤都可以按需选择或省略时。
结构型设计模式6.适配器模式(A da p t e r)适配器模式将一个类的接口转换为客户端所期望的另一个接口。
23种设计模式范文
23种设计模式范文设计模式是用来解决软件设计中的常见问题的经验总结和最佳实践。
这些模式抽象了实际应用中的问题,并提供了相应的解决方案。
本文将介绍23种经典的设计模式,并简要描述它们的用途和示例。
1.创建型模式-单例模式:保证一个类只有一个实例,并提供一个全局访问点。
-工厂模式:将对象的创建委托给工厂类,隐藏具体实现细节。
-抽象工厂模式:提供一个用于创建一系列相关或相互依赖对象的接口。
-建造者模式:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
-原型模式:通过复制已有对象来创建新对象,避免了直接创建对象的开销。
2.结构型模式-适配器模式:将一个类的接口转换成客户希望的另一个接口。
-桥接模式:将抽象部分与其实现部分相分离,使它们可以独立变化。
-组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构。
-装饰者模式:动态地给对象添加额外的职责,同时又不改变其结构。
-外观模式:为复杂子系统提供一个简化的接口。
-享元模式:通过共享对象来实现对大量细粒度对象的有效共享。
3.行为型模式-模板方法模式:定义一个操作中的算法框架,将一些步骤的具体实现延迟到子类中。
-命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化。
-迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示。
-观察者模式:定义对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。
-中介者模式:用一个中介对象封装一系列对象的交互,使各对象不需要显示地相互引用。
-备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
-解释器模式:给定一个语言,定义它的语法的一种表示,并定义一个解释器来解释该语言中的句子。
-状态模式:允许对象在其内部状态改变时改变它的行为。
-空对象模式:使用一个空对象来代替NULL对象的检查。
23种设计模式【范本模板】
创建型1。
Factory Method(工厂方法)2。
Abstract Factory(抽象工厂)3。
Builder(建造者)4. Prototype(原型)5。
Singleton(单例)结构型6。
Adapter Class/Object(适配器)7. Bridge(桥接)8. Composite(组合)9. Decorator(装饰)10。
Facade(外观)11. Flyweight(享元)12. Proxy(代理)行为型13. Interpreter(解释器)14。
Template Method(模板方法)15。
Chain of Responsibility(责任链)16. Command(命令)17. Iterator(迭代器)18. Mediator(中介者)19。
Memento(备忘录)20. Observer(观察者)21。
State(状态)22。
Strategy(策略)23. Visitor(访问者)创建型1.Factory Method(工厂方法)FactoryMethod.uml定义一个用于创建对象的接口,让子类决定实例化哪一个类。
Factory Method 使一个类的实例化延迟到其子类。
适用性:当一个类不知道它所必须创建的对象的类的时候.当一个类希望由它的子类来指定它所创建的对象的时候。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
2.Abstract Factory(抽象工厂)意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
3.Builder(建造者)意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
23种设计模式的形象比喻
1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向员说“来四个鸡翅”就行了。
麦当劳和肯德基就生产鸡翅的Factory工厂模式:客户类和工厂类分。
任何时候需要某种产品,只需向工厂请求即可。
无须就可以接纳新产品。
缺当产品时,工厂类也要相应的。
如:如何创建及如何向客户端。
2、BUILDER—MM听的就“爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,有一个多种语言翻译机,上面每种语言都有一个按键,见到MM只要按对应的键,它就能够用相应的语言说出“爱你”这句话了,国外的MM也可以轻松搞定,这就的“爱你”builder。
(这一定比美军在伊拉克用的翻译机好)建造模式:将对象的内部表象和对象的生成过程分割来,从而使一个建造过程生成具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。
建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住一件烦人的事情,一般采用Factory Method模式,带着MM到员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创建,而将具体创建的工作交给子类去,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
4、PROTOTYPE—跟MM用原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。
原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。
缺每一个类都必须配备一个克隆方法。
5、SINGLETON—俺有6个漂亮的老婆,她们的老公都,就们家里的老公Sigleton,她们只要说道“老公”,都指的同一个人,那就(刚才了个梦啦,哪有这么好的事)单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统这个实例单例模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭 包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新 的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码, 就比较容易理解。
输出:this is mailsender! 33、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
[java] view plaincopy
public class SendFactory { } public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); }
在提供一个接口:
[java] view plaincopy
public interface Provider { public Sender produce(); } 测试类:
[java] view plaincopy
public class Test { } public static void main(String[] args) { Provider provider = new SendMailFactory(); Sender sender = provider.produce(); sender.Send(); }
请看例子:
[java] view plaincopy
public interface Sender { public void Send(); } 两个实现类:
[java] view plaincopy
public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } }
[java] view plaincopy
public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); }
一、设计模式的分类
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态 模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:
class SendFactory {
public Sender produceMail(){
}
return new MailSender(); } public Sender produceSms(){ return new SmsSender(); }
其实这个模式的好处就是,如果你现在想增加一个功能:发及时信息,则只需做一个实现类,实现 Sender 接口,同时做一 个工厂类,实现 Provider 接口,就 OK 了,无需去改动现成的代码。这样做,拓展性较好!
3、单例模式(Singleton)
单例对象(Singleton)是一种常用的设计模式。在 Java 应用中,单例对象能保证在一个 JVM 中,该对象只有一个实例存在。这样的模 式有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
最后,建工厂类:
[java] view plaincopy
public class SendFactory {
}
public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } else if ("sms".equals(type)) { return new SmsSender(); } else { System.out.println("请输入正确的类型!"); return null; } }
举例如下: (我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口:
[java] view plaincopy
public interface Sender { public void Send(); }
其次,创建实现类:
[java] view plaincopy
[java] view plaincopy
public class FactoryTest { } public static void main(String[] args) { Sender sender = SendFactory.produceMail(); sender.Send(); }
2、省去了 new 操作符,降低了系统内存的使用频率,减轻 GC 压力。 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。 (比如一个军队出现了多个司令员同 时指挥,肯定会乱成一团) ,所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
首先我们写一个简单的单例类:
二、设计模式的六大原则
1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。 所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面 的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的 地方,子类一定可以出现。 LSP 是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类 才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的 关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽nce Inversion Principle) 这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。 4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出, 其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降 低耦合。 5、迪米特法则(最少知道原则) (Demeter Principle) 为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。 6、合成复用原则(Composite Reuse Principle) 原则是尽量使用合成/聚合的方式,而不是使用继承。
[java] view plaincopy
public class Singleton { } /* 持有私有静态实例,防止被引用,此处赋值为 null,目的是实现延迟加载 */ private static Singleton instance = null; /* 私有构造方法,防止被实例化 */ private Singleton() { } /* 静态工程方法,创建实例 */ public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } /* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */ public Object readResolve() { return instance; }
[java] view plaincopy
public class SendSmsFactory implements Provider{ } @Override public Sender produce() { return new SmsSender(); }
我们来测试下: public class FactoryTest { } public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = factory.produce("sms"); sender.Send(); }
三、Java 的 23 中设计模式
从这一块开始,我们详细介绍 Java 中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分 析。
1、工厂方法模式(Factory Method)
工厂方法模式分为三种: 11、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: