23种设计模式

23种设计模式-工厂模式

江枫思渺然 提交于 2020-02-29 22:07:59
什么是设计模式?设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。它是前辈们在开发中总结下来的一套经验,一套模型,掌握了设计模式会使我们写代码更加的行云流水 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。厂模式的本质就是用工厂方法代替new操作创建一种实例化对象的方式。一句话中总结就是方便创建 同种类型接口产品 的 复杂对象。举例:你需要一辆车,你只需要到厂里去提货,而不用去管这辆车是如何做出来的,只需要你会操作车就行了,说白了就是不把太多的逻辑实现暴露给客户端。 工厂分为普通工厂,静态工厂,抽象工厂 普通工厂eg: 创建一个寄件人接口,定义一个发消息的方法 package 静态工厂方法 ; //首先,创建二者的共同接口 //普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 public interface Sender { public void Send ( ) ; } 定义两个类实现接口,一个发邮件一个发短信 package 静态工厂方法

23种设计模式-----行为模式

天涯浪子 提交于 2020-02-27 20:14:08
行为模式: 关注系统中对象之间的相互交互,研究运行时对象之间的相互通信和协作,明确对象职责 1.模板方法模式(template method) 定义了一个操作中的算法 骨架 ,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。 即:处理步骤父类中定义好,具体实现延迟到子类中定义。 开发中:数据库访问的封装、Junit单元测试、servlet中doGet/doPost方法调用、Hibernate中模板程序等等 银行案例: 1 public abstract class BankTemplateMethod { 2 3 //具体方法 4 public void takeNumber() { 5 System.out.println("取号排队"); 6 } 7 8 //办理具体业务 、钩子方法 9 public abstract void transact(); 10 public void evaluate() { 11 System.out.println("反馈评分"); 12 } 13 14 //模板方法 15 public final void process() { 16 this.takeNumber(); 17 18 this.transact(); 19 20 this.evaluate(); 21 } 22 23

23种设计模式之单例模式

隐身守侯 提交于 2020-02-24 10:43:21
单例模式:确保一个类最多只有一个实例,并提供一个全局访问点 普通单例模式示例(有问题) public class Singleton { private static Singleton uniqueInstance = null; private Singleton() { } public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } } 示例Singleton public class ChocolateFactory { private boolean empty; private boolean boiled;//是否加热过 private static ChocolateFactory uniqueInstance = null; private ChocolateFactory() { empty = true; boiled = false; } public static ChocolateFactory getInstance() { if (uniqueInstance == null) { uniqueInstance = new

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

陌路散爱 提交于 2020-02-23 03:31:17
文章目录 工厂模式 1. 简单工厂模式 2.厂方法模式 简单工厂和方法工厂对比 工厂模式 工厂模式: (Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 核心本质 : 实例化对象不用 new,用工厂方法代替。 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 三种模式: 简单工厂模式 用来生产同一等级结构的任意产品。 (对于增加新的产品,需要覆盖已有代码) 工厂方法模式 用来生产同一等级结构中的固定产品。(支持增加任意产品) 抽象工厂模式 围绕一个超级工厂创建其他工厂。超级工厂又称为其他工厂的工厂。 1. 简单工厂模式 创建一个接口, public interface Car { public void name ( ) ; } 编写类实现接口, WuLing.class public class WuLing implements Car { @Override public void name ( ) { System . out . println ( "五菱宏光" ) ; } } Tesla .class public class Tesla implements

java实现23种设计模式之备忘录模式

断了今生、忘了曾经 提交于 2020-02-22 20:46:27
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。 package com.ceshi18; /** * 原件 */ public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Original(String value) { this.value = value; } public Memento createMemento(){ return new Memento(value); } public void restoreMemento(Memento memento){ this.value = memento.getValue(); } } package com.ceshi18; /** * 备忘 */ public class Memento { private String value; public Memento(String value) { this.value = value; } public String getValue() { return value; }

23种设计模式-中介者模式

﹥>﹥吖頭↗ 提交于 2020-02-21 11:48:08
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。 优点;   1、减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator;   2、由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。 由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。 使用场景:   一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多子类的场合。 来源: https://www.cnblogs.com/tingqianzhu/p/8496789.html

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

China☆狼群 提交于 2020-02-15 03:43:34
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式。 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 实现代码: class Prototype implements Cloneable { public Prototype clone(){ Prototype prototype = null; try{

Java开发中的23种设计模式详解

廉价感情. 提交于 2020-02-11 17:19:17
一、设计模式的分类 总体来说设计模式分为三大类: 1. 创建型模式 共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2. 结构型模式 共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 3. 行为型模式 共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 4. 其它 并发型模式和线程池模式。用一个图片来整体描述一下: 回到顶部 二、设计模式的原则(先不看) 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为

23种设计模式详讲-原型模式

孤者浪人 提交于 2020-02-08 00:23:58
一、什么是原型模式: 传统的创建的对象,可以用new直接新建对象,但是如果某些类的属性太多,这样构造起来会相对复杂;这里提供了一种不用通过构造方法,创建对象的方法;通过Jdk自带的Cloneable接口,实现对象的拷贝,创建新的对象; 二、何时使用原型模式: 原型模式其实就是一个对象在创建另一个可定制的对象,而且不需要指定任何创建的细节。Java提供了Cloneable接口,其中有一个唯一方法Clone(),实现这个接口就可以完成原型模式了。 一般在初始化的信息不发生变化的情况下,克隆是最好的办法。既隐藏了对象创建的细节,又对性能是大大的提高。不用重新初始化对象,而是动态地获得对象运行时的状态。 三、原型模式大概分为潜拷贝和深度拷贝: 1)潜拷贝: 代码示例: package com.jason.study.design.prototype.simple; import com.jason.study.design.prototype.Teacher; public class School implements Cloneable { private String name; private int id; private Teacher teacher; public String getName() { return name; } public void setName

23种设计模式

烈酒焚心 提交于 2020-02-08 00:20:36
设计模式是可复用面向对象软件的基础。它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理利用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一种模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛利用的原因。 给设计模式进行分类,可以分为以下三大类:创建型模式、结构型模式、行为型模式。 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。一、它们都将关于该系统使用哪些具体的类的信息封装起来。二、它们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知方法的是由抽象类所定义的接口。 结构型模式描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单几亩地组合形成复杂的、功能更更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式:类结构型模式关注累的组合,有多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。对象结构型模式关心雷雨对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据“合成复用原则”