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