前言 在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。 本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(1)单例模式》文章中,我们介绍了单例模式。 本文是这个系列的第二篇章,我们将讲解一下工厂模式的实现方式、应用场景以及它的用途。 工厂模式 工厂模式是一种创建型设计模式,其主要目标是封装对象的创建过程,使客户端代码与具体类的实例化解耦。 应用场景 避免直接使用new操作符: 抽象工厂模式通过工厂接口的方法来创建对象,避免了直接使用 new 操作符实例化具体类。这样的设计更符合面向对象的原则,使得系统更易于扩展和维护。 manufactureCarFactory.createLincolnCar().manufacture(); manufactureCarFactory.createBenzCar().manufacture(); 输出: 结尾 选择使用哪种工厂模式取决于具体的需求和设计情况
上一篇推文写了工厂方法模式,包括简单工厂模式、多工厂模式、静态工厂模式、抽象工厂模式,这篇推文记录一下单例设计模式 单例设计模式 在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。 static void main (String[] args){ SingleTon s1 = SingleTon.getInstance(); SingleTon s2 = SingleTon.getInstance(); System.out.println(s1 == s2); //true } } 在静态方法创建实例并直接调用如果不是线程同步 = SingleTon.getInstance(); System.out.println(s1 == s2); //true } } 懒汉式(线程安全) 优点:在多线程情形下, 保证了“懒汉模式”的线程安全。
行为模式 行为模式是注意各个类之间的相互作用,讲过职责划分清楚,使得我们的代码更加清晰规范。 1.1策略模式 下面设计的场景是,需要画一个图形,可选的策略就是用红色笔来画,还是绿色笔来画,或者蓝色笔来画。 观察者的模式无外乎两个操作,观察者订阅自己关心的主题和主题有数据变化后通知观察者们。 1.4 模板方法模式 在含有继承结构的代码中,模板方法模式是非常常用的。 商品库存中心有个最基本的需求是减库存和补库存,我们看看怎么用状态模式来写。 核心在于,我们的关注点不再是 Context 是该进行哪种操作,而是关注在这个 Context 会有哪些操作。
Java 设计模式的相关原则 一、单一职责原则 单一职责原则: 应该有且仅有一个原则引起类的变更 单一职责可以简答的理解为,一个类或者对象,承担的只能应该尽可能单一。 单一职责用“职责”和“变化原因”来衡量接口或类设计得是否优良。但是“职责”的确定往往是无法度量的。 PS: 子类出现的地方,父类未必可以出现 在类中调用其他类时,务必使用父类或接口,如果不能使用,则说明类的设计已经违背了里氏替换原则(Liskov Substitution Principle,LSP 接口隔离原则需要保证的几个特性: 接口尽量要小: (在保证单一职责的情况小,尽量保证接口不过于臃肿) 接口要高内聚:(尽量减少与外界的交互,少公有,多私有) 定制服务: (为特定的服务对象提供其所需的方法) 接口设计是有限度的
简介 工厂模式是在工作中第一次正式使用的(当然准确说是抽象工厂),所以作为第二篇的设计模式分享。 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 2、Hibernate 换数据库只需换方言和驱动就可以。 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。 步骤 1 创建一个接口: Shape.java public interface Shape { void draw(); } 步骤 2 创建实现接口的实体类。
在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品 地点: 湖南永州市蓝山县舜河村 作者:用心笑* Java设计模式-工厂模式(2)工厂方法模式 一、前言 1)概述: 2)角色结构: 3)类图关系: 二、代码实现 1)Coffce咖啡抽象类(产品抽象类 2)角色结构: 抽象工厂(Creator):是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。 想了解简单工厂模式点Java设计模式-工厂模式(1)简单工厂模式 具体还是看代码实现吧,在看文末比较总结吧 二、代码实现 1)Coffce咖啡抽象类(产品抽象类) public abstract class
懒汉模式 优点:延迟加载 缺点:会产生多线程同步吧 public class Singleton { private static Singleton instance = null; private TODO 2. 饿汉模式 优点:不会出现多线程同步问题?
工厂模式: 这里用百度百科的词条来解释: 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象。 在我们java生态中,spring对工厂模式运用的可算是极致了,顶级类BeanFactory是bean的最顶级的工厂类... 在这里,我模拟一下工厂模式: 先说一下工厂模式需要的角色: 机器? 试想,天下的面条种类那么多,工厂模式是非常容易扩展的,实现思路即java的“多态” 这里,就已经实现了一个简单的工厂模式,即简单工厂模式 当你的宝马机器生产宝马的时候,这个时候只需要拓展Machine类即可 machine = new BMWMachine(); System.out.println(machine.create(new Object())); } 这就是java
Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //利用反射执行该方法 参数1 目标类,参数2
关于该设计模式在 VFP 中的应用示例,我考虑了很久。最终决定以主程序的伪代码来做。它至少有两个作用: 1. 通过“主程序”这个过程化代码的重灾区的改造,体会 OOP 的设计思想; 2. 通过主程序的演变说明该模式的特点。 一个最简单的主程序,基本上需要完成以下功能:环境设置、路径设置、启动主UI。而在实际应用中,可能需要提供试用版、标准版和定制版。 *** 启动主UI *** Procedure StartUI() With _Screen .Visible = .T. .WindowState = 2 “它也许是创建型设计模式中最灵活最复杂的设计模式”
这篇推文学习创建型模式最后一种-原型模式,该模式的思想是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象,以便使用 首先需要了解对象深、浅复制的概念: 浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建 所有的Java类都继承至Object,而Object类提供了一个clone()方法,该方法可以将一个java对象复制一份,因此在java中可以直接使用clone()方法来复制一个对象。 ("cat:" + cat); //cat_2 System.out.println("cat_2:" + cat_2); //同个对象? System.out.println( cat.getClass() == cat_2.getClass());/true } } 优点 如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程 相反,如果对象的状态变化很大,或者对象占用的内存很大,那么采用状态模式会比原型模式更好。
设计模式 一、单例模式 定义:单例模式,保证一个类有且仅有一个实例,并提供一个它的全局访问点。 缺点:不管用到与否,类装载时就完成实例化(如果没有用到,则内存浪费)。 这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 这种设计模式可以用于解耦。 装饰者模式 定义:装饰是一种结构设计模式, 允许你通过将对象放入特殊封装对象中来为原对象增加新的行为。 装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。 装饰模式的核心在于抽象装饰类的设计。
设计模式基础 设计模式主要基于的面向对象设计的原则: 程序到一个接口不用实现; 有利于对继承对象组合; 设计模式用途: 开发人员的通用平台; 最佳实践; 类型: 创造模式:提供了一种创建对象而隐藏创建逻辑的方法 ,而非直接使用new来实例化对象; 结构模式:涉及类和对象组成,继承概念用于组成接口并定义方法组合对象以获得新功能; 行为模式:侧重于对象之间的通信; J2EE 模式:设计表示层,由Sun Java Center ,可直接访问而不需要实例化类对象; 原型模式 涉及实现一个原型接口,只创建当前对象的克隆; Builder模式 构造器逐步构建最终对象,此构造器独立于其他对象; 结构设计模式 适配器(Adapter)模式 ,用于减少层代码中的业务层代码的通信或远程查找功能,业务层中实体如下: 客户端:表示层代码可以是 JSP,servlet 或 UI java 代码; 业务代理:为客户端实体提供对业务服务方法的访问的单入口点类 ,且无需检查空值; MVC 模式 模型:表示携带数据对象或JAVA POJO,若其数据改变也可以具有逻辑来更新控制器; 视图:表示模型包含的数据的可视化层; 控制器:对模型和视图都起作用,控制数据流进入模型对象
简介 java中一般认为有23种设计模式,当然暂时不需要所有的都会,但是其中常见的几种设计模式应该去掌握。 总体来说设计模式分为三大类: 创建型模式: 共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 单列模式 所谓的单例设计指的是一个类只允许产生一个实例化对象;最好理解的一种设计模式,分为懒汉式和饿汉式。 工厂设计模式 工厂模式分为工厂方法模式和抽象工厂模式。 工厂方法模式 工厂方法模式分为三种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。
本文链接:https://blog.csdn.net/github_39655029/article/details/82736019 设计模式基础 设计模式主要基于的面向对象设计的原则: 结构模式:涉及类和对象组成,继承概念用于组成接口并定义方法组合对象以获得新功能; 行为模式:侧重于对象之间的通信; J2EE模式:设计表示层,由Sun Java Center标识; 创造设计模式 ,可直接访问而不需要实例化类对象; 原型模式 涉及实现一个原型接口,只创建当前对象的克隆; Builder模式 构造器逐步构建最终对象,此构造器独立于其他对象; 结构设计模式 适配器 :表示层代码可以是JSP,servlet或UI java代码; 业务代理:为客户端实体提供对业务服务方法的访问的单入口点类; 查找服务:负责获得相关业务的实施和提供业务的委托对象业务对性爱难过的访问; NULL对象类,不提供此类的任何实现,且无需检查空值; MVC模式 模型:表示携带数据对象或JAVA POJO,若其数据改变也可以具有逻辑来更新控制器; 视图:表示模型包含的数据的可视化层; 控制器
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 三、Java中具体的设计模式 1.简单工厂模式(Simple Factory) 根据提供给它的参数,返回的是几个可能产品中的一个类的实例。 ? 在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。
设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结 设计模式分为 23 种经典的模式,根据用途我们又可以分为三大类。 分别是创建型模式、结构型模式和行为型模式 列举几种设计原则,这几种设计原则将贯通全文: 面向接口编程,而不是面向实现。 下面来看看一个例子,先把装饰模式弄清楚,然后再介绍下 java io 中的装饰模式的应用。 这是一个简单的设计模式,我们直接上代码再说吧。 总结 学习设计模式的目的是为了让我们的代码更加的优雅、易维护、易扩展。这次整理这篇文章,让我重新审视了一下各个设计模式,对我自己而言收获还是挺大的。
Java设计模式 今天一直在思考一个让我疑惑的问题,在用 SpringBoot 进行项目开发的时候,有这样一个场景,比如说家具和物料是两个不同的模块,有一个调用的是我们小米数字门店通用的接口,代码的实现逻辑都是一致的
策略模式(Strategy Pattern) 现在来地说说如何来实现策略模式(锦囊妙计): 1、策略[妙计]实现接口(IStrategy); 2、对应的策略实现类(*Strategy); 3、封装策略的锦囊 IStrategy.java /* *策略实现的接口 */ public interface IStrategy{ //策略执行方法 public void operate(); } FirstStrategy.java [策略2] public class SecondStrategyimpelements IStrategy{ public void operate(){ system.out.printf ("this is the second strategy"); } } ThirdStrategy.java[策略3] public class SecondStrategyimpelements context1.doOperate();//output: this is the first strategy StrategyContext context2=
状态模式: 允许一个对象在其内部状态改变时改变其行为, 其对象看起来像是改变了其类. (图片来源: 设计模式:可复用面向对象软件的基础) 其目的是: 解决系统中复杂对象的状态流转以及不同状态下的行为封装问题. 模式实现 案例: 问题跟踪(Bug状态流转): 有过Kelude、Jira使用经验的同学都知道一个Bug由测试同学提出, 一直到被开发同学解决会经过一系列状态的流转: 新建(New) -> 打开(Open ) -> 解决(Fixed) -> 关闭(Closed) … 且每种状态都会对应复杂业务的处理逻辑(如通知相应开发/测试人员、邮件/短信提醒、报表记录等等), 下面我们就以这个场景来讨论状态模式的实现 context.setCurrent(new OpenState()); } context.request(); } } 另外还有一种基于表驱动的状态机实现, 实现细节参考 设计模式