设计模式
文章平均质量分 78
你眨一下眼,就翻阅了我心里的春夏秋冬四季
TwcatL_tree
我家二猫爱爬树
展开
-
关联和依赖的区别
最近研究设计模式,看类图有点发虚!有些关系搞的不是很清楚。所以整理一下: 类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。 类和类之间八竿子打不着那就是没关系,这个没啥歧义。 依赖(dependency) 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但..原创 2020-09-08 20:41:46 · 1652 阅读 · 0 评论 -
访问者模式实例扩展客户管理的功能
说明:公司客户分为企业客户和个人客户目前的功能:客户提出服务申请需要扩展的功能:(1)客户对公司产品的偏好分析。针对企业和个人客户有不同的分析策略。主要是根据以往购买的历史、潜在购买意向等分析。对于企业客户还要分析其所在行业的发展趋势、客户的发展预期等(2)客户价值分析。针对企业和个人客户,有不同的分析策略。主要根据购买的金额大小、购买的产品和服务的多少、购买的频率进行分析的。潜在功能:不同客户的需求调查、满意度分析、客户消费预期分析等。解决方案:对象结构就两种:企业客户和个人客户,如何原创 2020-06-11 13:09:42 · 309 阅读 · 0 评论 -
享元模式实例五子棋
享元模式,以共享的方式高效地支持大量的细粒度对象。通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。享元的英文是Flyweight,表示特别小的对象,即细粒度对象。我们借用五子棋游戏来说明这一模式。UML代码:创建抽象棋子一AbstractChessmanpackage com.demo.flyweight.object;public abstract class AbstractChessman { // 棋子坐标 protected int x; protected原创 2020-06-11 11:40:04 · 801 阅读 · 0 评论 -
命令模式实例计算器
使用命令模式岩石和简单的计算器功能,并允许执行UNDO和REDOUML图代码package 命令模式;public class Caculator {private int total; public Caculator() { this.total = 0;} public void Operation(char op,int num){switch(op) {case '+':total+=num;break; case '-':total-=num;break;原创 2020-06-04 13:02:02 · 868 阅读 · 0 评论 -
桥接模式实例消息发送
发送消息现在我们要实现这样一个功能:发送消息。从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加“加急”字样,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促。从发送消息的手段上看,又有系统内短消息、手机短消息、邮件等等。现在要实现这样的发送提示消息的功能,该如何实现呢?UML图:代码:package xaioxifasong; public abstract class AbstractMeesage原创 2020-05-30 22:21:59 · 594 阅读 · 0 评论 -
单例模式实例读取配置文件
请结合单例模式实现基于txt的配置文件的读取。Txt文件可以自行建立,例如:1 2003 Spring Soccer League (Spring '03)2 2003 Summer Summer Soccer Fest 20033 2003 Autumn Autumn Soccer League (2003)4 2004 Spring Soccer League (Spring '04)5 2005 Summer The Summer of Soccer Love 20056 2006 Au原创 2020-05-30 22:05:26 · 802 阅读 · 0 评论 -
组合模式实例商品类别树
1.题目:有一个根节点,比如“服装”,它没有父节点,它可以包含其他的节点。树枝节点,有一类节点可以包含其他的节点,称之为树枝节点,比如“男装”、“女装”和“母婴”。叶子节点,有一类节点没有子节点,称之为叶子节点,比如“衬衣”、“夹克”、“裙子”、“套装”等。如果碰到类似上面这种,需使用对象树来描述或实现的功能,都可以考虑使用组合模式,比如读取XML文件,或是对语句进行语法解析等。2.UML图3.代码package 组合模式;public abstract class Cloth {p原创 2020-05-22 21:17:16 · 697 阅读 · 0 评论 -
备忘录模式实例象棋中“悔棋”操作
1.题目分析首先需要一个实体类来代表一枚象棋的基本信息,包含象棋的名字/当前坐标其次需要一个备忘录类来保存象棋的信息,这个类应当含有象棋类的要保存的字段,并且该类对外封闭由于备忘录类是对外封闭的,所以应当由一个备忘录管理者类,来负责创建和恢复象棋的备忘录客户端不与备忘录类耦合,而是借用备忘录管理类来管理备忘录2.UML图3.代码象棋实体类package 备忘录模式;public class Chessman { private String name; private int原创 2020-05-22 19:19:07 · 934 阅读 · 0 评论 -
状态模式实例请假流程
工作流中的请假流程某人提出请假申请,先由项目经理审批,如果项目经理不同意,审批就直接结束如项目经理同意,再看是否超过3天,如果三天以内,审批直接结束否则,交给部门经理,部门经理审核后,无论是否同意,审批直接结束状态类package 状态模式;public abstract class State { public abstract void shenPi(Work w);}...原创 2020-05-07 15:42:24 · 761 阅读 · 0 评论 -
设计模式学习之简单工厂+反射+配置文件
用反射+配置文件的方法重新实现大话设计模式课本上15章15.7的例题问题分析:相比抽象工厂,用DataAccess类代替了工厂接口以及工厂类,再加上使用反射+配置文件的方式,可以做到不对编译好的程序作出改变就能修改数据库种类,客户端可以只是用DateAccess进行数据库访问实例的创建,达到了解耦的目的。UML图:package com.cmc;//用户数据类public class ...原创 2020-05-07 15:21:43 · 403 阅读 · 0 评论 -
工厂模式+配置文件+反射实现数据访问程序
User表和Department表 class User { private int _id; public int Id { get { return _id; } set { _id = value; } } private string _name; ...原创 2020-05-04 11:50:16 · 263 阅读 · 0 评论 -
Java高级特性——反射
概述定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。当然...原创 2020-05-03 11:17:26 · 269 阅读 · 0 评论 -
Java基础之—反射(非常重要)
反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文...转载 2020-05-03 11:12:38 · 164 阅读 · 0 评论 -
观察者模式实例股票通知
演示注册的投资者在股票市场发生变化时,可以自动得到通知。该例子仍然使用的是传统的Observer处理手段。UML:首先是C#环境下的代码:// Observer pattern -- Real World example using System;using System.Collections;// "Subject"abstract class Stock{ // ...原创 2020-04-23 13:07:03 · 1153 阅读 · 0 评论 -
建造者模式实例数据拼接 java生成真实XML文件
导出数据的应用框架,通常对于具体的导出内容和格式是有要求的:分成三部分,文件头、文件体、文件尾文件头:分公司编号、导出数据的日期,对于文本格式,中间用逗号分离文件体:表名称,然后分条描述数据。。。。文件尾:输出人不管是输出文本文件,还是输出XML文件,步骤基本一致先拼接文件头的内容然后拼接文件体的内容在拼接文件尾的内容最后把拼接好的内容输出去成为文件Builderpacka...原创 2020-04-16 20:07:26 · 348 阅读 · 0 评论 -
模式方法模式实例数据库访问
采用模板方法模式实现数据库访问的例子DataObject.javapackage 模板方法;public abstract class DataObject { protected abstract void startConnection(); protected abstract void endConnect(); public void templateMeth...原创 2020-04-16 19:20:09 · 334 阅读 · 0 评论 -
模板方法模式实例登录控制
1 场景问题#1.1 登录控制##几乎所有的应用系统,都需要系统登录控制的功能,有些系统甚至有多个登录控制的功能,比如:普通用户可以登录前台,进行相应的业务操作;而工作人员可以登录后台,进行相应的系统管理或业务处理。现在有这么一个基于Web的企业级应用系统,需要实现这两种登录控制,直接使用不同的登录页面来区分它们,把基本的功能需求分别描述如下:先看看普通用户登录前台的登录控制的功能:前...转载 2020-04-09 19:35:52 · 863 阅读 · 0 评论 -
原型模式实例订单处理系统
订单处理系统现在有一个订单处理系统,里面有一个保存订单的业务功能,需求:每当订单的预定产品数量超过1000的时候,就需要把订单拆成两份订单来保存。如果拆成两份后还是超过1000,则继续拆分,直到每份产品预订数量不超过1000.根据业务,目前的订单系统分成两种,一种是个人订单、一种是公司订单。客户名称、产品对象(ID,Name),订购产品数量。公司名称、产品对象(ID,Name),订购产品数...原创 2020-04-09 15:26:06 · 1369 阅读 · 0 评论 -
工厂方法模式实例公司系统
在实际的企业应用中,一个公司的系统往往分散在很多不同的地方运行。公司既没有建立全公司专网的实力,又不愿意让业务数据实时地在广域网上传递。折中的方案是各分公司内运行系统独立,每天业务结束时,各分公司导出业务数据、打包、传送给总公司。导出数据格式会有不同要求文本格式、数据库备份格式、Excel格式、Xml格式分清哪是产品类、哪是工厂类ExportFileApipackage 工厂方...原创 2020-04-02 20:03:11 · 685 阅读 · 0 评论 -
代理模式实例订单系统
一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人则不能修改。三个属性:产品名称、订购数量、订购人成员接口package daili;public interface OrderApi { public String getProductName(); public void setProductName(String productName, String use...原创 2020-04-02 19:24:45 · 629 阅读 · 0 评论 -
装饰模式实例复杂的奖金计算
复杂的奖金计算奖金分类,对于个人有当月奖金、个人累计奖金、个人业务增长奖金、及时回款奖金、限时成交加码奖金等;对于业务主管或者是业务经理,除了个人奖金外,还有团队累积奖金、团队业务增长奖金、团队盈利奖金等。计算公式也有不同计算奖金金额的基数也有不同奖金的计算方式会经常变化。要适于调整和修改成员接口package A; public abstract class Component...原创 2020-04-02 17:41:02 · 591 阅读 · 0 评论 -
简易理解设计模式之:访问者模式——员工考核例子
介绍:访问者模式属于行为型模式。表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类前提下定义作用于这些元素的新操作。它的基本思想是:将数据操作与数据结构分离,将一些稳定的对象的类拥有一个accept方法用来接收访问者访问。类图:• Visitor(抽象访问者):定义每一个元素(Element)访问的行为。• ConcreteVisitor(具体访问者):需要对每...原创 2020-03-28 12:00:06 · 706 阅读 · 0 评论 -
简易理解设计模式之:解释器模式——语言和文法
介绍:解释器模式属于行为型模式。它的定义为:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。先理解一些概念语言:指有限字符组成的字符串集合,也就是中文、英文、日语、德语…但对于程序员来说语言就是abcd这类字符了。文法:文法是用来描述语言的语法成分结构构造的形式规则。如规定一条句子为主谓宾结构,构造的规则为“我是[名词]”这样的结构,...原创 2020-03-28 11:58:12 · 539 阅读 · 0 评论 -
简易理解设计模式之:中介者模式——多人聊天室例子
介绍:中介者模式属于行为型模式。它的定义为:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变他们之间的交互。类图:Mediator(抽象中介者角色):定义一个接口用于各同事之间的通讯。ConcreteMediator(具体中介者角色):它从具体的同事对象接受信息,向具体同事对象发出命令,负责协调同事之间的交互。Colle...原创 2020-03-28 11:56:39 · 1255 阅读 · 1 评论 -
简易理解设计模式之:责任链模式——OA中请假流程示例
介绍:责任链模式属于行为型设计模式。它的定义为:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止。类图:Handler(抽象处理者角色):声明一个请求处理方法,并在其中保持一个对下一个处理节点Hanlder对象的引用。ConcreteHandler(具体处理者角色):对请求进行处理,如果不能处...原创 2020-03-28 11:54:38 · 1189 阅读 · 0 评论 -
简易理解设计模式之:命令模式——实现命令的参数化配置
介绍:命令模式是一种行为型模式。将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。备注:所谓的参数化,使用端使用执行同一个请求,但是为请求配置不同的命令对象,那就会执行不同的功能。例如:使用者按下一个按钮,到底是开机还是重启,那要看参数化配置的是哪一个具体的按钮对象。类图:Receiver(接受者角色):负责具体实施一个...原创 2020-03-28 11:52:34 · 892 阅读 · 0 评论 -
简易理解设计模式之:迭代器模式——遍历对象的好帮手
介绍:迭代器模式属于行为型模式。它提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。类图:Iterator(迭代器接口):定义、访问和遍历元素的接口ConcreteIterator(具体迭代器类):实现迭代器接口,并记录遍历的当前位置Aggregate(容器接口):提供创建具体迭代器角色的接口ConcreteAggregate(具体容器类):实现容器接口功能...原创 2020-03-28 11:50:41 · 363 阅读 · 0 评论 -
简易理解设计模式之:备忘录模式——Word文档的工作原理
介绍:备忘录模式属于行为型模式。它的定义为:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。类图:Originator(发起人角色):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。...原创 2020-03-28 11:49:07 · 915 阅读 · 1 评论 -
简易理解设计模式之:状态模式——优化登录操作
介绍:状态模式属于行为型模式。它的定义为:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。类图:State(抽象状态角色):抽象类或者接口,定义抽象状态。StateA、StateB(具体状态角色):具体状态角色,实现该状态下具体的行为。Context(环境角色):定义客户端需要的接口,控制状态间的切换。用法:• 一个对象的行为取决于它的状态,并且它必须在...原创 2020-03-28 11:46:45 · 580 阅读 · 0 评论 -
简易理解设计模式之:观察者模式——监听与回调
介绍:观察者模式属于行为型模式。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。类图:Subject(抽象被观察者):抽象主题角色把所有观察者对象的引用保存在一个集合里,并提供可以增加和删除观察者的接口。ConcreteSubject(具体被观察者):该角色接受具体观察者对象,并在具体主题...原创 2020-03-28 11:45:03 · 545 阅读 · 0 评论 -
简易理解设计模式之:模板方法模式——Android中的BaseActivity基类
介绍:模板方法模式属于行为型模式。定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。类图:模板方法模式UML类图AbstractClass(抽象模板类):定义了一套算法框架。ConcreteClass(具体实现类):实现模板方法步骤中未执行的方法。用法:• 多个子类有公共的方法,并且逻辑基本相同时。• 重...原创 2020-03-28 11:43:10 · 410 阅读 · 0 评论 -
简易理解设计模式之:策略模式——优化一下支付功能
介绍:策略模式属于行为型模式。它定义了一系列的算法,把每一个算法封装起来,让它们之间可相互替换,此模式让算法的变化,不会影响到使用算法的客户。类图:Stragety(抽象策略类):抽象类或接口,提供具体策略类需要实现的接口,抽离通用方法。ConcreteStragetyA、ConcreteStragetyB(具体策略类):具体的策略实现,封装了相关的算法实现。Context(环境类...原创 2020-03-28 11:31:32 · 691 阅读 · 0 评论 -
简易理解设计模式之:代理模式——iOS列表视图控件设计方式
介绍:代理模式属于结构型模式,也叫委托模式。作用:为其他对象提供一种代理以控制这个对象的访问。类图:Subject(抽象主题类):声明真实主题与代理的共同接口方法RealSubject(真实主题类):负责执行具体的任务,客户端可以通过代理类间接的调用真实主题类的方法Proxy(代理类):持有对真实主题类的引用,负责调用真实主题类中相应的接口方法Client(客户端类):使用代理对...原创 2020-03-28 11:29:33 · 458 阅读 · 0 评论 -
简易理解设计模式之:享元模式——五子棋游戏例子
介绍:享元模式是一种结构型模式。它的定义为:使用共享对象可有效地支持大量的细粒度的对象。两个概念• 内部状态:不会随环境的改变而改变,可以共享的相同内容• 外部状态:随着环境的改变而改变,不能够共享的内容上图所示,Hello World!字符串就是内部状态,而外部状态就是各种颜色。客户端通过设置不同的外部状态可以使相同的对象具有不同特征。通俗点讲,一个类有两个属性(成员变量),颜...原创 2020-03-28 11:21:24 · 1192 阅读 · 0 评论 -
简易理解设计模式之:外观模式——第三方SDK的帮助类
介绍:外观模式属于结构型模式。它为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。类图:Facade(外观角色):为子系统统一接口。System(子系统角色):具有各种复杂行为。用法:• 用外观模式解耦降低了用户的使用成本。(例如在设计代码初段,应该有意识地将不同的层分离。如经典的MVC模式中,View层和Model层界面与数据...原创 2020-03-28 11:18:29 · 540 阅读 · 0 评论 -
简易理解设计模式之:组合模式——实现View中的树状结构
介绍:组合模式属于结构型模式。将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。类图:Component(抽象组件角色):为组合中的对象声明接口Composite(树枝节点):树枝节点有子节点,用来存储子部件Leaf(叶子节点):叶子节点没有子节点用法:• 表示对象的部分-整体层次结构时• 从一个整体中能够独立出部分模块...原创 2020-03-28 11:16:33 · 798 阅读 · 0 评论 -
简易理解设计模式之:桥接模式——穿衣服经典案例2
介绍:桥接模式属于结构型模式。它的定义为:将抽象部分与实现部分分离,使它们都可以独立的变化。类图:Abstraction(抽象化角色):抽象部分,保持对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现。RefinedAbstraction(具体抽象化角色):优化后的抽象部分,一般是对抽象部分的方法进行完善和扩展Implementor(实现化角色):实现部分,提供基本...原创 2020-03-28 11:13:35 · 415 阅读 · 0 评论 -
简易理解设计模式之:适配器模式——Android列表视图控件设计方式
介绍:适配器模式属于结构型模式。把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。类图:适配器模式也分两种:类适配器模式和对象适配器模式。Target(目标角色):所期待得到的接口,即目标接口。Adaptee(被适配角色):即源接口,一般是已存在的类,现在需要适配新的接口。Adapter(适配器角色):适配器把源接口(被适...原创 2020-03-28 11:11:31 · 459 阅读 · 0 评论 -
简易理解设计模式之:单例模式——单例模式的几种常用写法
介绍:单例模式是一种创建型模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点。类图:Singleton(单例类):定义一个getInstance操作,允许客户访问它的唯一实例,getInstance是一个静态方法,主要负责创建自己的唯一实例。用法:• 确保某个类有且只有一个对象时。个人理解:• 创建一个对象需要消耗过多资源时(IO操作、访问数据库等)• 工具类、帮助...原创 2020-03-28 10:31:53 · 409 阅读 · 0 评论 -
简易理解设计模式之:原型模式——深、浅拷贝的概念
介绍:原型模式是一种创建型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。类图:Prototype(抽象原型类):抽象类或接口,声明复制方法。ConcretePrototype(具体原型类):具体被复制的对象。Client(客户端类):调用类。用法:• 类初始化时候需要消耗非常多资源,通过原型拷贝避免这些消耗。• 通过new产生一个对象时候需要非常繁琐的...原创 2020-03-28 10:29:38 · 361 阅读 · 0 评论