设计模式
设计模式
959y
奋斗ing
展开
-
设计模式与原则
GRASP: 通用职责分配软件模式(共9种)SOLID:设计原则(共5种)GOF:设计模式(共23种)其他必要设计原则文章目录1.GRASP:通用职责分配软件模式(共9种)2.SOLID:设计原则(共5种)3.GOF:设计模式(共23种)4.其他必要设计原则1.GRASP:通用职责分配软件模式(共9种)告诉我们怎样设计问题空间中的类与分配它们的行为职责,以及明确类之间的相互关系等Infomation Expert(信息专家)Creator(创造者)Low coupling(低耦合).原创 2022-04-12 11:13:50 · 251 阅读 · 0 评论 -
设计模式_策略模式
抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。环境(Context)类:持有一个策略类的引用,最终给客户端调用。策略模式可以传入一个策略然后进行对应的使用比如Arrays中的comperator方法,Stream流中很多策略模式Spring中的XmlBeanDefinitionReader和Pr.原创 2021-12-11 18:26:35 · 205 阅读 · 0 评论 -
设计模式_访问者模式
抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。具体访问者(ConcreteVisitor)角色:实现抽象访问者角色中声明的各个访问操作,确定访问者访问一个元素时该做什么。抽象元素(Element)角色:声明一个包含接受操作 accept() 的接口,被接受的访问者对象作为 accept() 方法的参数。具体元素(ConcreteElement)角色:实现抽象元素角色提供的 accept() .原创 2021-12-10 20:52:43 · 144 阅读 · 0 评论 -
设计模式_迭代器模式
迭代器模式主要包含以下角色。抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。public class .原创 2021-12-10 20:49:46 · 199 阅读 · 0 评论 -
设计模式_命令模式
命令模式包含以下主要角色。抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。具体命令类(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。调用者/请求者(Invoker)角色:是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,它不直接访问接收者。pu.原创 2021-12-10 20:43:46 · 389 阅读 · 0 评论 -
设计模式_模板方法模式
一部分为具体方法一部分为需要子类实现的方法实线为继承,泛化。虚线为实现。public class TemplateMethodPattern { public static void main(String[] args) { AbstractClass abstractClass = new ConcreteClass(); abstractClass.TemplateMethod(); }}// 抽象类abstract class Abst.原创 2021-12-10 17:42:09 · 397 阅读 · 0 评论 -
设计模式_单例设计模式_破坏以及解决
破坏有两种:1.序列化和反序列化2.反射机制class Single7{ private Single7(){ } private static class SingletonInstance{ private static final Single7 INSTANCE = new Single7(); } public static Single7 getInstance(){ return SingletonInstance原创 2021-04-05 22:01:34 · 238 阅读 · 2 评论 -
依赖聚合/组合UML
左下右原创 2021-02-22 17:52:59 · 141 阅读 · 0 评论 -
工厂模式
1.简单工厂模式2.工厂方法模式3.抽象工厂模式工厂方法模式UML抽象方法模式UML原创 2021-02-22 17:51:38 · 213 阅读 · 0 评论 -
接口隔离原则
定义:客户端不应该依赖它不需要的接口。另外一种定义:类间的依赖关系应该建立在最小的接口上。场景:在接口I中定义多个方法(假如A,B,C,D),类C1通过实现接口I来扩展自己需要的方法A、B;类C2通过实现接口I来扩展自己需要的方法C、D;那么接口I对于类C1和类C2来说不是最小接口,则类C1和类C2必须去实现他们不需要的方法。解决方案:采用接口隔离原则。将臃肿的接口I拆分为独立的几个接口,类C1和类C2分别与他们需要的接口建立依赖关系。接口隔离原则说白了就是,让客户端依赖的接口尽可能地小,接口隔离原则原创 2021-02-19 18:34:08 · 138 阅读 · 0 评论 -
单一职责原则
单一职责原则的英文名称是Single Responsibility Principle,简称是SRP:There should never be more than one reason for a class to change.RBAC模型(Role-Based Access Control,基于角色的访问控制,通过分配和取消角色来完成用户权限的授予和取消,使动作主体(用户)与资源的行为(权限)分离)BO(Business Object,业务对象)Biz(Business Logic,业务逻辑)原创 2021-02-19 18:30:50 · 119 阅读 · 0 评论 -
里氏替换原则
里氏替换原则里氏替换原则(Liskov Substitution Principle,LSP)● 第一种定义,也是最正宗的定义:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a su原创 2021-02-19 18:17:55 · 147 阅读 · 0 评论 -
装饰者模式_设计模式_java
装饰者设计模式:可以解决类爆炸的问题和cop原则比如如果是一个卖咖啡的商店,去卖不同种类的咖啡,有黑咖啡,意大利咖啡,还可以加入很多调理的话.如果用传统的面向对象的方法的话会使得类爆炸。如果引用装饰者模式可以动态的增加方法。使得类自动建造这里有装饰者和被装饰者。以前我们都是咖啡上加入调理,现在我们是调理中加入咖啡Drink.javapublic abstract class Drink { public String des; private float price = 0.0f;原创 2021-02-03 12:47:55 · 260 阅读 · 0 评论 -
桥接设计模式_设计模式_java
桥接设计模式:解决了很多依赖关系,解决了类爆炸问题,不可扩展问题以及解决了单一职责原则传统的一个问题:卖手机:这个如果加上一个方法的话会增加很多手机,如果增加一个手机的话会加上很多方法变的代码比较多桥接模式:Phone充当桥接的桥梁Brand.java品牌public interface Brand { public void open(); public void close(); public void call(); }小米手机实现接口xiaomi.java原创 2021-02-02 20:24:04 · 166 阅读 · 0 评论 -
适配器模式_设计模式_java_接口模式
接口模式:顾名思义只是为了实现所有接口中的一个或者几个接口的模式Interface4.javapublic interface Interface4 { public void m1(); public void m2(); public void m3(); public void m4(); }AbsAdapter .javapublic abstract class AbsAdapter implements Interface4{ public void m1() {原创 2021-02-02 18:42:19 · 127 阅读 · 0 评论 -
适配器模式_设计模式_java_对象适配器
对象适配器是解决了类适配器耦合使得继承变为聚合Voltage220.javapublic class Voltage220 { public int output220() { int src = 220; System.out.println("输入"+src+"伏"); return src; }}Voltage5.javapublic interface Voltage5 { public int output5();}VoltageAdapt.java变原创 2021-02-02 18:26:23 · 148 阅读 · 0 评论 -
适配器模式_设计模式_java_类适配器
适配器模式:如同插口一样:3口和2口如何进行链接呢,需要一个适配器进行转换1.类适配器模式2.对象适配器模式3.接口适配器模式1.类适配器模式Voltage220.javapublic class Voltage220 { public int output220() { int src = 220; System.out.println("输入"+src+"伏"); return src; }}Voltage5.javapublic interface Volta原创 2021-02-02 18:12:07 · 137 阅读 · 0 评论 -
建造者模式_设计模式_java
建造者模式:顾名思义:是创造型模式而最重要的是解耦来获得建造者和用户之间的依赖关系JDK中的StringBuldder就是用的建造者设计模式类图:1.House.javapublic class House { private String baise; private String wall; private String roofed; public String getBaise() { return baise; } public void setBaise(Strin原创 2021-02-01 22:49:37 · 196 阅读 · 0 评论 -
原型模式_设计模式_java
复制粘贴功能我们都用过,我们可以把一个文件从一个地方复制到另外一个地方,复制完成之后这个文件和之前的文件也没有一点差别,这就是原型模式的思想:首先创建一个实例,然后通过这个实例去拷贝创建新的实例。这篇文章就好好地分析一下原型模式。文章目录1.认识原型模式2.代码实现原型模式1.浅拷贝:2.深拷贝:3.分析原型模式1、克隆对象不会调用构造方法2、访问权限对原型模式无效3、使用场景1.认识原型模式1、概念就比如克隆羊,用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。java上分析:首原创 2021-02-01 18:07:18 · 199 阅读 · 0 评论 -
工厂模式_卖手机_设计模式_java
工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:下面我们使用手机生产来讲解该模式:Phone类:手机标准规范类(Abs原创 2021-01-29 20:44:06 · 337 阅读 · 0 评论 -
单例模式_设计模式_java
1.饿汉式,静态常量2.饿汉式,静态代码块3.懒汉式,线程不安全4.懒汉式,线程安全,同步方法5.懒汉式,线程安全,同步代码块6.双重检查7.静态内部类8.枚举678推荐对于频繁创建和销毁对象,用单例模式创建对象时候耗时过多,耗费资源大经常访问数据库,文件的对象-数据源,session工厂对于JDK来说Runtime类用的是饿汉式1.public class demo01 { public static void main(String[] args) { Single s原创 2021-01-27 14:26:10 · 141 阅读 · 0 评论 -
代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。使用场景按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。原创 2020-06-26 23:48:33 · 144 阅读 · 0 评论 -
单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。应用实例1.Windows 是多进程多线程的,在操作一个文件的时候,就不可避免原创 2020-06-26 23:26:41 · 193 阅读 · 0 评论 -
MVC模式简介
文章目录MVC介绍MVC举例MVC优点MVC的缺点MVC介绍MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器。使用的MVC的目的:在于将M和原创 2020-06-19 23:59:53 · 1866 阅读 · 0 评论 -
工厂模式概述
文章目录工厂模式1.介绍2.实现2.1 步骤 12.2 步骤 22.3 步骤 32.4 步骤 42.5 步骤 5工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。1.介绍意图:定义一...原创 2020-04-04 12:19:45 · 306 阅读 · 0 评论 -
设计模式简介
1.设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可...原创 2020-04-03 19:12:55 · 222 阅读 · 0 评论