`
文章列表
电脑的各个配件之间的交互,都是通过主板完成的,如果没有主板,各个配件就必须自行相互交互。类似的,将配件都抽象成为一个类或者是子系统,那就相当于出现了多个类之间相互交互,而且交互很繁琐,类与类就耦合了, ...
问题引人:给系统加入权限控制,如普通人员可以查看本部门人员列表时,但是每个人员的工资信息,普通人员看不到。而部门经理可以看到 所有的权限系统都分为两个部分,一个是授权部分,一个是验证部分,为了理解它们,引人两个基本名词:安全实体和权限 安全实体:就是被权限系统检测的对象,比如工资数据 权限:就是需要被校验的权限对象,比如查看、修改等。 两者要一起描述才有意义。 授权:是指将对某些安全实体的某些权限分配给某些人员的过程。 验证:值判断某个人员对某个安全实体是否拥有某个或某些权限 多数采用数据库来存储授权过程产生的数据,也就是说:授权是向数据库添加数据,验证是从数据库中获取相应数据进行匹配。 假设 ...
问题引人:申请聚餐费用,申请人填写申请单,然后交给领导审阅,如果申请批准下来,领导会通知申请人,然后申请人去财务领费用,如果没有就罢了。项目经理、部门经理、总经理审批的费用额度不同。一般申请人并不知道到底是由谁来处理他的请求。 项目经理-》部门经理->总经理,也可能是部门经理->总经理,责任链是变化的。 不使用设计模式的解决方式: package notusingMode; public class FeeRequest { //提交申请给部门经理 public String requestToProjectManager(String user,double fee){ ...
问题引人:继续导出数据的应用框架 讨论工厂方法模式时,提到了一个导出数据的应用框架。比如导出成文本格式,数据库备份形式,excel格式,xml格式等。 在工厂模式中,并没有讨论如何实现导出成文本、xml文件等,假如需求有以下: 1,导出的文件,不管什么格式,分为3部分,文件头,文件体和文件尾 2,在文件头,需要描述:分公司或门市点编号。导出数据的日期,对于文本格式,中间用逗号分隔。 3,文件体中,需要描述:表名称,然后分条描述数据。对于文本格式,表名称单独占一行,数据描述一行算一条数据,字段间用逗号分隔, 4,文件尾,需要描述:输出人 为简便起见,只实现导出成文本格式和Xml格式 要先将文件各个 ...
生活中的示例:组装电脑,如组装公司根据你的需求组装一个电脑(需要接触卖CPU、卖主板的)给你,这里的组装公司的角色就是外观模式。 分析将卖cpu等的电子市场视为一个系统,卖各个配件的视为模块,需求就变为:客户需 ...
问题引人:订阅报纸的过程: 订阅者---》邮局-----》报社  (订阅过程) ,当报社按照出报时间推出报纸时,将报纸交给邮局,邮局再交给订阅者,当报社有新报纸出版的时候,如何让多个订阅者知道呢?进一步抽象描述这个问题:当一个对象的状态发生改变的时候,如何让依赖于它的所有对象得到通知,并进行相应的处理呢?------》观察者模式 定义:定义对象间的一种一对多的关系,当一个对象状态发生变化,依赖于此对象的所有对象都会得到通知,并自动更新。 一个报纸对象会有多个人阅读,当报纸状态改变时,需要通知所有的订阅者。这就是典型的一对多关系。 观察者模式将多个订阅者称为观察者,obeserver,多个观察者观 ...
引出:组装电脑例子,向电脑加入新硬盘,但电源和新的硬盘的电源接口不同,该如何?采用一个转换线,将电源的接口适配成为新的硬盘所需要的接口,那么这个转换线就是-----适配器(adapter)。还比如各种管道的转接头、不同制式的插座等。 notusingMode包里是日志的第一版,将日志保存在文件里,notusingMode2是日志的第二版,将日志保存在数据库中 package notusingMode; import java.io.Serializable; /* * 日志对象模型,描述日志的,这个对象需要被写入文件,需要序列化 */ public class LogMo ...
具体的实现代码见附件 问题引人:组装电脑,要选择机箱、电源、主板、CPU等,为了简单,只考虑主板和cpu。 主板和cpu都有型号,而且如果要组装cpu的针脚数和主板提供的cpu插口要匹配才行。客户负责选择cpu和主板,然后将这 ...
基于《研磨设计模式》,没什么实质突破,简单的记录一下 问题引人:考虑一个订单系统。该系统里有一个保存订单的业务功能,在这个功能里,用户有这样的需求当订单的预定产品数量超过1000的时候,就需要把订单拆成两份订单来保存,如果拆分后还是超过1000,继续拆分,直到每份订单的预定产品数量不超过1000。 一个订单,有个人订单和公司订单。不管什么类型的订单,都要能正常的处理,如何实现???不用模式的解决方案见notusingMode包,该解决方案的订单业务处理对象 必须知道订单 的具体实现类,才能进行处理,也难以扩展新的订单类型, package notusingMode; //既然要实现通用的订 ...
数组java中无多维数组,都是一维数组,多维数组可以看做是数组的数组。下面是一个利用数组打印类似杨辉三角中数字的例子package ch3; /** @version 1.20 2004-02-10 @author Cay Horstmann */ //不规则数组,数组的列数不同,打印类似杨辉三角 public class LotteryArray { public static void main(String[] args) { final int NMAX = 10; // allocate triangular ...
设计4个线程,两个线程每次对j增加1,另外两个对j减少1 package thread; public class ThreadTest { private int j; private synchronized void inc() { j++; System.out.println(Thread.currentThread().getName() + "-inc:" + j); } private synchronized void dec() { j--; System.out.println(Thread.curr ...
转自http://www.riabook.cn/doc/designpattern/ProducerConsumer.htmProducer Consumer模式与 Guarded Suspension 模式 是类似的,只不过Guarded Suspension模式并不限制缓冲区的长度,Producer Consumer模式假设所生产的产品放置在一个长度有限制的缓冲区(就像是一个产品桌,它可以摆放的空间是有限的),如果缓冲区满了,则生产者必须停止继续将产品放到缓冲区中,直到消费者取走了产品而有了空间,而如果缓冲区中没有产品,当然消费者必须等待,直到有新的产品放到缓冲区中。 以下是一个最简单的: ...
SQL的数据类型与Java 数据类型的对应关系2007-09-10 08:54由于数据库表字段类型没与Java数据类型对应好,引起程序错了,特找了其对应关系留记号。 下面显示了 SQL 数据类型和相应的 Java 数据类型。 SQL 数据类型    相应的 Java 数据类型 VARCHAR                    java.lang.String CHAR                          java.lang.String INTEGER                     Int 或 Integer BINARY              ...
对于GoF总结的经典的23中设计模式,分为3类: (1)创建型模式:抽象了对象实例化的过程,用来帮助创建对象的实例的。 (2)结构型模式:描述如何组合类和对象以获得更大的结构。 (3)行为型模式:描述算法和对象间职责的分配 CRM(Customer Relationship management)客户关系管理 CRM的主要含义就是通过对客户详细资料的深入分析,来提高客户满意程度,从而提高企业的竞争力的一种手段。 SCM(Supply chain management)供应链管理 是一种集成的管理思想和方法,它执行供应链中从供应商到最终用户的物流的计划和控制等职能。从单一的企业角度来看,是指企 ...
本文转自http://chjavach.iteye.com/blog/834679 简单工厂就是实现创建对象的功能,将创建对象的实现封装起来以供客户端使用,但有时一个接口的实现类有多个,如何选择创建哪个具体实例呢?可以从客户端传入参数,或用配置文件方式,在客户端传入参数中,当增加一个新的具体实例时,就要修改工厂类,以下是用配置文件形式,利用反射机制动态生成类,无需修改工厂类 /** * 工厂类,用来创造Api对象 */ public class Factory { /** * 具体的创造Api的方法,根据配置文件的参数来创建接口 * @return 创造好的Api对象 ...
Global site tag (gtag.js) - Google Analytics