设计模式
登高方可远眺……
莫余
无论如何,都要去试一试,哪怕不能证明我可以!
展开
-
访问者模式例题——扩展客户管理的功能(CRM)
元素接口:public abstract class Customer { public abstract void accept(Visitor visitor);}企业客户类:public class Encustomer extends Customer { @Override public void accept(Visitor visitor) { visitor.enShow(this); }}个人客户类:public class Incustomer ext.原创 2020-06-13 23:21:06 · 280 阅读 · 0 评论 -
享元模式经典例题——五子棋游戏
共享类的接口:public abstract class FlyWeight { protected int x; protected int y; public abstract void display(int x,int y);}具体的FlyWeight:public class BlackFlyWeight extends FlyWeight { @Override public void display(int x, int y) { System.out.printl.原创 2020-06-13 22:22:21 · 467 阅读 · 0 评论 -
把数据从数据结构中分离出来的 访问者模式
访问者模式目的把数据从数据结构中分离出来应用场景访问者模式仅应当在被访问的类结构非常稳定的情况下使用访问者模式提供了倾斜的可扩展性设计:方法集合的可扩展性和类集合的不可扩展性。换言之,如果系统的数据结构是频繁变化的,则不适合使用访问者模式。本质预留通路,回调实现优点访问者模式使得增加新的操作变得很容易。增加新的操作就意味着增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。缺点增加新的节点类变得很困难。 每增加一个新的节原创 2020-06-12 21:09:31 · 200 阅读 · 0 评论 -
让对象变“轻”的 享元模式
共享内部状态,加载外部状态原创 2020-06-12 19:23:15 · 123 阅读 · 0 评论 -
便于通信的 中介者模式
中介者模式Mediator模式 将对象间的交互和通信封装在一个类中,各个对象间的通信不必显式去声明和引用,大大降低了系统的复杂性能。Mediator模式还带来了系统对象间的松耦合。优点将多对多的通信转化为一对多的通信,降低了系统的复杂性。Mediator还获得系统解耦的特性,降低了系统的耦合性,Mediator和各个Colleague就可以相互独立地修改了。控制集中,集中的优点就是便于管理,符合单一职责原则缺点中介者的复杂性本质封装交互抽象中介者类:public abs原创 2020-06-04 23:21:43 · 163 阅读 · 0 评论 -
命令模式例题——计算器(撤销、恢复)
执行者类:public class Calculator { private int total=0; public void operation(char operator,int operand) { switch(operator) { case '+':total+=operand;break; case '-':total-=operand;break; case '*':total*=operand;break; case '/':total/=operand;br.原创 2020-06-04 22:22:54 · 1443 阅读 · 3 评论 -
动态的 职责链模式
职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。角色抽象处理者(Handler)角色定义出一个处理请求的接口。 如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色 通常由一个抽象类或接口实现。具体处理者(ConcreteHandler)角色具体处理者接到请求后,可以选择将请求处理掉,或者将请原创 2020-06-04 21:49:34 · 570 阅读 · 0 评论 -
封装请求的 命令模式
命令模式命令模式是对命令的封装。命令模式把发出命令的贵任和执行命令的责任分割开,委派给不同的对象。应用场景请求队列化支持取消操作对系统的操作功能重新执行一遍优点命令模式使新的命令很容易地被加入到系统里。允许接收请求的一方决定是否要否决(Veto) 请求。能较容易地设计一个命令队列。可以容易地实现对请求的Undo和Redo。在需要的情况下,可以较容易地将命念记入日志。命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。命令类与其他任何别的类一样,可以修改和推广。原创 2020-06-01 08:14:11 · 228 阅读 · 0 评论 -
桥接模式例题——发送消息
用不同的形式发送普通、加急、特急消息功能接口:public interface MessageImplementor { public void send(String message,String toUser);}具体功能1:public class MessageSMS implements MessageImplementor { @Override public void send(String message, String toUser) { System.out.原创 2020-05-31 23:00:41 · 332 阅读 · 0 评论 -
单例模式例题——读取配置文件
AppConfig.properties:paramA=aparamB=b单例类:public class Singleton { private static Singleton instance; private static String name; private Singleton() { } @SuppressWarnings("static-access") private Singleton(String name) { super(); this.na.原创 2020-05-31 22:22:31 · 234 阅读 · 0 评论 -
抽象与实现分离的桥接模式
桥接模式本质分离抽象与实现满足的原则开放封闭原则组合复用原则面向对象实际上就两句话:一是松耦合(Coupling),二是高内聚(Cohesion)。面向对象系统追求的目标就是尽可能地提高系统模块内部的内聚(Cohesion)、尽可能降低模块间的耦合(Coupling)。Bridge模式的用意将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。耦合两个实体的行为的某种强关联。解耦将它们的强关联去掉,就是耦合的解脱原创 2020-05-29 23:05:42 · 737 阅读 · 0 评论 -
面试经常遇到的 单例模式
三要素私有构造函数静态私有成员变量(instance)静态公有方法(GetInstance)使用场景在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就不要使用单例模式。本质:控制实例数目单例模式分为两类懒汉式单例模式(时间换空间)在使用实例时 在去创建实例private static Singleton singleton;饿汉式单例模式(空间换时间)在类加载时 就已经创建好了实例private static Singleton原创 2020-05-29 14:43:01 · 150 阅读 · 0 评论 -
迭代器模式简述
迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。最简单的:.Net中的foreach inJava中的for(Leaf leaf:chiJdLeaf)…}相关设计模式组合模式与迭代器模式这两个模式可以组合使用,在组合模式中,通常可以使用迭代器模式来遍历组合对象的子对象集合,而无需关心具体存放子对象的 聚合结构由于好多已经封装了迭代器模式,所以不花太多文笔了。...原创 2020-05-22 10:59:35 · 175 阅读 · 0 评论 -
详解组合模式及商品识别树例题
组合模式何时使用需求中是体现部分与整体层次的结构时希望用户忽略组合对象与单个对象的不同, 统一的使用组合结构中的所有对象时优点定义了包含基本对象和组合对象的类层次结构基本对象可以组合成组合对象,组合对象又能组合成更复杂的组合对象,可以不断地递归组合下去,从而构成-一个统一的组 合对象的类层次结构统一了组合对象和叶子对象简化了客户端调用不用区分组合对象和叶子对象更容易扩展由于客户端是统一的面对Component来操作,因此,新定义的Composite或leaf子类能够很容易的与已有原创 2020-05-22 07:34:03 · 308 阅读 · 0 评论 -
备忘录模式——象棋悔棋例题
设计理念:时刻记着Memento类好比一个模具,真正实验存储状态的是Caretaker类,当然,起最大作用的就是Originator了,既通过模具来创造状态,又可以进行过去状态的转变。象棋备忘录:public class ChessMemento { private int x,y; private String name; public ChessMemento() {} public ChessMemento(int x, int y, String name) { super()原创 2020-05-21 16:21:19 · 611 阅读 · 0 评论 -
可以实现后悔的 备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。优点使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需要的这些状态的版本。当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。缺点资源消耗不知道占用多大的空间适用场合如原创 2020-05-21 15:59:14 · 143 阅读 · 0 评论 -
适配器模式(对象适配器)
适配器模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的两种形式类适配器采用 “多继承” 的实现发式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用 “对象组合” 的方式,更符合松耦合精神。在以下各种情况下使用适配器模式系统需要使用现有的类,而此类的接口不符合 系统的需要。想要建立一个有以...原创 2020-05-07 22:24:14 · 1214 阅读 · 0 评论 -
状态模式——请假例题
题目描述工作流中的请假流程某人提出请假申请,先由项目经理审批,如果项目经理不同意,审批就直接结束如项目经理同意,再看是否超过3天, 如果3天以内,审批直接结束否则,交给部门经理,部门经理不同意,审批就直接结束如部门经理同意,再看是否超过7天, 如果7天以内,审批直接结束否则,交给人力资源部经理,人力资源部经理审核后,无论是否同意,审批直接结束思路总状态接口,供各种状态所使用...原创 2020-05-07 22:08:25 · 523 阅读 · 2 评论 -
可以实时改变的 状态模式
状态模式状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的逻辑简化。允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的系列类当中,可以把复杂的逻辑简化。State模式就是被用...原创 2020-05-07 16:41:00 · 416 阅读 · 0 评论 -
抽象工厂模式实现数据访问(java 反射+配置文件)
package reflectAbstractFactory.user;public class User { private long id; private String name; public long getId() { return id; } public void setId(long id) { thi...原创 2020-05-06 15:49:11 · 363 阅读 · 0 评论 -
最为抽象、最具一般性的 抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。产品族(Product Family):所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。具体工厂(Concrete Factory) 角色:这个角色直接在客户端的调用下创...原创 2020-05-01 10:06:30 · 275 阅读 · 0 评论 -
观察者模式 股票实例
演示注册的投资者在股票市场发生变化时,可以自动得到通知抽象通知者:public abstract class Stock { protected String symbol; protected double price; private ArrayList<Investor> investors=new ArrayList<Investor>(); p...原创 2020-04-25 21:36:05 · 2699 阅读 · 3 评论 -
同桌 之间经常发生的 观察者模式
观察者模式:优点:观察者模式实现了观察者和目标之间的抽象耦合。观察者模式实现了动态联动。观察者模式支持广播通信。被观察者会向所有的登记过的观察者发出通知。缺点:可能会引起无谓的操作。本质:触发联动。观察者模式又叫做:发布-订阅(Publish/Subscribe)模式模型-视图(Model/View)模式源-监听器(Source/Listener)模式从属...原创 2020-04-25 21:22:07 · 196 阅读 · 0 评论 -
组装复杂实例 的 建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。建造者(Builder) 角色:定义创建一一个Product对象所需的各个部件的操作具体建造者(Concrete Builder)角色:实现Builder角色提供的接口,一步一步完成创建产品实例的过程。在建造过程...原创 2020-04-25 20:43:24 · 220 阅读 · 0 评论 -
外观模式(言简意赅)
4、写操作时序为使数据或指令能够被LCD正确接收,在写数据或指令时要遵守一定的时序要求,1602型LCD的写操作应按照以下几个过程进行:1)设置RS,当RS=0时,读写指令;当RS=1时,读写数据;2)设置读写控制端RW,当RW=0时,写数据或指令,当RW=1时,读数据或指令;3)将数据或指令送至数据线;4)给使能端E正跳变,开始传送数据或指令;5)给使能端E负跳变,开始显示数据或执行...原创 2020-04-21 21:31:39 · 161 阅读 · 0 评论 -
工厂方法模式
public interface ExportFileApi { public boolean export(String data);}public abstract class ExportOperate { protected abstract ExportFileApi factoryMethod(); public boolean export(String data) ...原创 2020-04-20 13:25:45 · 167 阅读 · 0 评论 -
利用 模板方法模式 实现对数据库的 增删查改
抽象父类里有抽象方法,可供子类重写使用。模板类:public abstract class DataObject { public abstract void connect() throws ClassNotFoundException, SQLException; public abstract void select() throws SQLException; public ...原创 2020-04-19 14:19:56 · 295 阅读 · 0 评论 -
一直默默在用的 模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。抽象父类:public abstract class AbstractClass { //一些抽象的方法 放到子类去实现 public abstract void PrimitiveOperation1(); public abstract...原创 2020-04-09 21:41:14 · 142 阅读 · 0 评论 -
原型模式例题——订单处理系统
订单处理系统:现在有一个订单处理系统,里面有一个保存订单的业务功能,需求:每当订单的预定产品数量超过1000的时候,就需要把你单拆成两份订单来保存。如果拆成两份后还是超过1000,则继续拆分,直到每份产品预订数量不超过1000.根据业务,目前的订单系统分成两种,一种是个人订单,一种是公司订单。客户名称、产品对象(ID,Name),订购产品数量。公司名称、 产品对象(ID, Name) ,...原创 2020-04-09 21:17:53 · 1542 阅读 · 0 评论 -
原型模式(简单易懂)
原型(Prototype)模式:客户(Client) 角色: 客户类提出创建对象的请求。抽象原型(Prototype)角色: 这是一个抽象角色,通常接口或抽象类实现。在Java中,抽象原型角色通常实现了Cloneable接口(具体可参考Visual CHM)。具体原型(Concrete Prototype)角色: 被复制的对象。此角色需要实现抽象原型角色所要求的接口。优点:一般在初始化的...原创 2020-04-09 20:44:13 · 177 阅读 · 0 评论 -
代理模式 例题2——送礼物
送礼物:一个人通过另一个人来送给“女神”礼物。被追求者:女神public class SchoolGirl { private String name; public SchoolGirl(String name) { super(); this.name = name; } public String getName() { return name; } p...原创 2020-04-04 18:06:27 · 316 阅读 · 0 评论 -
代理模式 例题1
订单系统:一旦订单被创建, 只有订单的创建人才可以修改订单由的数据,其他人则不能修改。三个属性:产品名称、订购数量、订购人。定义订单的接口:public interface OrderApi { public String getProductName(); public void setProductName(String productName,String user); pub...原创 2020-04-04 15:28:56 · 463 阅读 · 0 评论 -
不善言辞的 代理模式
在软件系统中,我们无时不在跨越障碍,当我们访问网络上一台计算机的资源时,我们正在跨越网络障碍,当我们去访问服务器上数据库时,我们又在跨越数据库访问障碍,同时还有网络障碍。跨越这些障碍有时候是非常复杂的,如果我们更多的去关注处理这些障碍问题,可能就会忽视了本来应该关注的业务逻辑问题,Proxy模式有助于我们去解决这些问题。代理(Proxy)模式:给某个对象提供一个替身或占位符,以控制对这个对象...原创 2020-04-03 22:30:53 · 150 阅读 · 0 评论 -
装饰模式——奖金例题
抽象类,功能是发放奖金,准备接受附加职责的对象public abstract class Component { protected String name; protected double mon; public Component() {} public Component(String name, Double mon) { this.name = name; ...原创 2020-04-02 21:01:24 · 400 阅读 · 2 评论 -
深入浅出理解 装饰模式
装饰模式:抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。具体构件(Concrete Component)角色:实现组件对象接口,通常就是被装饰器装饰的对象。装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。具体装饰(Concrete Decorator)角色:负责给构件对象"贴上"...原创 2020-03-26 21:24:37 · 152 阅读 · 0 评论 -
通俗易懂的设计模式中的七大原则
1.单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:目的: 降低代码复杂度、解系统耦合性、增强内聚性、提高可读性要求:一个类仅仅负责一项职责含义: 指一个类或者模块应该有且只有一个改变的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。例如: 实现加减乘除四则运算,应继承抽象类,每个实体类...原创 2020-03-26 14:31:58 · 293 阅读 · 0 评论 -
策略模式
抽象父类,里面有一个抽象方法public abstract class CashSuper { public abstract double acceptCash(double money); }public class CashContext { private CashSuper cs; public CashContext(CashSuper csuper) { t...原创 2020-03-20 12:53:37 · 109 阅读 · 0 评论 -
简单工厂模式(Java实现)
简单工厂模式原创 2020-03-15 21:34:46 · 735 阅读 · 0 评论 -
还在为ecplise无法导出UML图而担心吗?不如点开看看吧
1.下载UML插件我下载的是AmaterasUML_1.3.4,没有下载或者不好下载的可联系我,无偿给发哟!2.解压后,会看到三个jar包3.把jar包复制到ecplise-- >dropins下4.重启ecplise5.把左边对应的类和文件直接拖过来,调整一下位置就OK了...原创 2020-03-12 13:38:06 · 270 阅读 · 0 评论