
设计模式
我是养乐多
这个作者很懒,什么都没留下…
展开
-
备忘录模式
核心:保存对象内部状态的拷贝,以便能恢复该对象。适用于回滚操作 结构: 源发器类Originator:被备忘保存的数据对象 备忘录类Memento:复杂拷贝Originator对象的内部状态 负责人类Caretake:管理备忘对象 备忘录模式模拟信息恢复: Originator: /*源发器类*/ public class Emp { private String ename;//基本信息...原创 2020-04-02 20:47:24 · 229 阅读 · 0 评论 -
观察者模式
当对象间存在一对多关系时,使用观察者模式。 比如,当一个对象被修改时,则会自动通知它的依赖对象。 观察者模式属于行为型模式。 通知观察者的方式:推(观察者被动接受)与 拉(观察者接到通知,可自由选择查看) 观察者模式模拟游戏内玩家参数同步: 首先定义一个观察者的接口: /*观察者*/ public interface Observer { void update(Subject s); }...原创 2020-04-02 17:50:03 · 199 阅读 · 0 评论 -
状态模式
解决系统中复杂对象的状态转换,以及不同状态下行为的封装。 结构: Context 环境类:管理不同状态的切换 State 抽象状态类 ConcreteState 具体状态类:每个类封装了一个状态对应的行为 状态模式模拟酒店入住系统: 抽象状态类: public interface State { void handler(); } 三个具体状态类: /*空闲状态*/ public cla...原创 2020-04-02 15:51:00 · 154 阅读 · 0 评论 -
模板方法模式
定义了一个操作中的算法骨架,将某些步骤延迟到子类实现。 定义一个算法骨架:抽象类,中间有一个抽象方法等待子类实现 /*模板方法模式模拟办理银行业务*/ public abstract class BankeTemplateMethod { public void takeNumber(){ System.out.println("取号排队"); } publ...原创 2020-04-02 15:13:00 · 139 阅读 · 0 评论 -
策略模式
策略模式对应于解决某一个问题的一个算法族,允许用户从这个算法族中任选一个算法解决某一问题,同时可以方便更新与增删算法 首先定义策略接口(以产品打折为例子): public interface Strategy { public double getPrice(double standardprice);//传入商品原价 } 首先定义不同的策略:(实现策略接口) /*普通客户少量购买*/ p...原创 2020-04-02 14:50:54 · 164 阅读 · 0 评论 -
中介者模式
中介者模式是行为型的模式之一 由实例演示: 首先建立一个中介者接口: /*中介者接口*/ public interface mediator { void register(String dname,Department p); void command(String dname); } 然后是抽象部门角色: /*部门类接口*/ public interface Departmen...原创 2020-04-02 14:09:15 · 134 阅读 · 0 评论 -
责任链模式
责任链模式为请求创建了一个接收者对象的链。 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 模拟公司请假流程: /*封装请假信息*/ public class LeaveRequset { private String empname;//员工名 private int leaveday;//请假...原创 2020-04-01 16:25:43 · 140 阅读 · 0 评论 -
装饰模式
装饰器设计模式具体组成部分: 一.抽象组件:需要装饰的抽象对象(接口或抽象父类 ) 二.具体组件:需要装饰的对象 三.抽象装饰类:包含了对抽象组件的引用 以及共有的方法 四.具体装饰类:装饰后的对象,抽象装饰类的子类 实例: /*抽象组件*/ public interface Icar { void move(); } /*具体组件*/ class Car implements Icar...原创 2020-04-01 10:44:07 · 138 阅读 · 0 评论 -
组合模式
组合模式内一共有三个角色: 组合部件(Component):它是一个抽象接口 叶子(Leaf):在组合中表示子节点对象 合成部件(Composite):在组合表示父节点对象,自己还有孩子 当遇到树型结构,考虑使用组合模式 模拟杀毒软件框架例子: 定义一个抽象接口: public interface AbstractFile { void killVirus();//杀毒 } 两个叶子结构类...原创 2020-03-31 23:47:03 · 143 阅读 · 0 评论 -
桥接模式
桥接模式: 对于有两个变化维度的系统,例如电脑的种类与品牌,桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量, 方便了后期扩展。 首先品牌属性,先定义一个接口: public interface Brand { void statement(); } 定义两个实现类(代表两个品牌): class Dell implements Brand{ @Over...原创 2020-03-31 21:00:31 · 204 阅读 · 0 评论 -
代理模式
通过代理,控制对对象的访问。 抽象角色:定义代理角色和真实角色公共对外方法,一个接口 真实角色:实现抽象角色接口,关注真正的业务逻辑 代理角色:实现与代理角色一样的接口,内部有真实角色的引用,并且可以添加自己的操作 静态代理例子:自定义代理类 先定义一个接口: public interface Star { void sing();//表演 } 代理类与真实类继承一个接口: public ...原创 2020-03-31 17:25:58 · 168 阅读 · 0 评论 -
适配器模式
适配器模式,是连接两个接口的桥梁。 java适配器模式有两种,类适配器和对象适配器。 类适配器是适配器继承被适配器的类,但是java编程一般选用组合方式,少用继承。 所以对象适配器更好: /*被适配的类*/ public class Adaptee { public void request(){ System.out.println("完成客户需要功能"); } ...原创 2020-03-31 11:22:24 · 214 阅读 · 0 评论 -
原型模式
当通过new一个对象时需要非常繁琐的数据,或者需要访问权限,考虑使用原型模式 首先看一个例子: public class Sheep implements Cloneable{ private String name; private Date birthday; @Override protected Object clone() throws CloneNot...原创 2020-03-30 21:30:40 · 129 阅读 · 0 评论 -
工厂模式与建造者模式
核心本质:用工厂方法代替new操作,创建对象原创 2020-03-30 16:55:10 · 254 阅读 · 0 评论 -
单例模式
/*实现单例模式: * 在多线程环境下,对外只存在一个对象 * 1.构造器私有化,防止在外部创建对象 * 2.内部提供私有静态属性:存储对象地址 * 3.提供公共静态方法获取属性*/ public class DoubleCheckedLocking { private static volatile DoubleCheckedLocking instance;//懒汉式,没有new对象,...原创 2020-03-17 11:24:11 · 172 阅读 · 0 评论