java阅读笔记starskyhu

1》针对接口编程,而不是针对实现编程

2》优先使用对象组合,而不是类继承

1.只根据抽象类中定义的接口来操纵对象有以下两个好处?

1)客户无须知道他们使用对象的特定类型,只需对象有客户所期望的接口

2)客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类

这将极大地减少子系统实现之间的相互依赖关系,也产生了可复用的面向对象设计的如下原则:

针对接口编程,而不是针对实现编程

2.继承和组合的比较?

继承:

类继承是在编译时刻静态定义的,且可直接使用,因为程序设计语言支持类继承,可以较方便的改变被复用的实现。

1)继承在编译时刻就定义了,所以无法再运行时刻改变从父类继承的实现,并且父类通常至少定义了部分子类的具体表示。因为继承对子类揭示了其父类的实现细节,常被认为

“破坏了封装性”,子类中的实现与它的父类有如此紧密的依赖关系,以至于父类实现中的任何变化必然导致子类发生变化。

2)如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制复用性。一个方法:只继承抽象类(提供较少的实现)

组合:

1)对象组合是通过获得对其他对象的引用而在运行时刻动态定义的。组合要求对象遵守彼此的接口约定,进而要求更仔细的定义接口,而这些接口并不会妨碍你将一个对象和其他对象

一起使用。对象只能通过接口来访问,并不破坏封装性;只要类型一致,运行时刻还可以用一个对象来替代另一个对象;更进一步,因为对象的实现是基于接口编写的,所以很少依赖

2)优先使用对象组合有助于你保持每个类被封装,并被集中在单个任务上。这样的类和类继承层次会保持较小的规模,另一方面,基于对象组合的设计会有更多的对象(而有较少的类)

且系统的行为将依赖于对象间的关系而不是被定义在某个类中

导出我们的面向对象设计的第二个原则:

优先使用对象组合,而不是类继承

3.模式与框架的区分?

1)设计模式比框架更抽象

框架能够用代码表示,而设计模式只有其实例才能表示为代码。框架的威力在于它们能够使用程序设计语言写出来,它们不仅能被学习,也能被直接执行和复用

2)设计模式是比框架更小的体系结构元素

一个典型的框架包含了多个设计模式,而反之绝非如此

3)框架比设计模式更加特例化

框架总是针对一个特定的应用领域。一个图形编辑器框架可能被用于一个工厂模拟,但它不会被认错为是一个模拟框架

框架变得越来越普遍和重要。它们是面向休息系统获得最大复用的方式。较大的面对对象将会由多层彼此合作的框架组成。应用的大部分设计和代码将来自于他所使用的框架

第二章Java程序设计中最基本的设计模式(23种)

设计模式有什么:描述一个设计模式,通常包含如下四个部分:

模式名称:就是为每一个设计模式取个名字,好记忆交流

坏境和问题:描述在什么场景下,出现什么样的特定的问题

解决方案:描述如何解决问题

效果:描述模式可能带来的问题,或者使用过程中需要权衡的问题

一、单例模式

方案:Singleton模式主要作用是保证在Java程序中,一个类只有一个实例存在。很多时候,比如建立目录,数据库连接都需要这样的单线程操作。

Singleton能够被状态化,这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务例子:论坛中的帖子计数器--synchronize的安全自动加一

Singleton也能够被无状态化。好处在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收

使用示例:一般Singleton模式通常有两种形式:

one:较安全些

publicclassSingleton{

privateSingleton(){}

//在自己内部定义自己的一个实例,是不是很奇怪?

//注意这是private只供内部调用

privatestaticSingletoninstance=newSingleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问

publicstaticSingletongetInsatnce(){

returninstance;

}

two:

//第一次调用初始Singleton,以后就不用再生成了

privatestaticSingletoninstance=null;

publicstaticsynchronizedSingletongetInstance(){

//这个方法比上面的有所改进,不用每次都进行生成对象,只是第一次

//使用时产生实例,提高了效率

if(instance==null)

instance=newSingleton();

使用Singleton注意事项:(真正使用好,需要对Java的类线程内存等概念有相当的了解)

1.有时在某些情况下,使用Singleton并不能达到效果,在有多个Singleton对象同时被不同的类装入器装载;在EJB这样的分布式系统中使用也要注意这种情况,

因为EJB是跨服务器的,跨JVM的

分析说明:在EJB中,Singleton模式会失去作用,SUN公司的宠物店源码中ServiceLocator才分为两种,一种是面向WEB的,一种是面向EJB服务的

二、工厂模式---标准的创建对象的方法

问题:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类

方案:工厂模式是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类。当一个类无法预料要创建哪一个类对象或是一个类

需要由子类来指定创建的对象时我们就需要用到工厂模式了。简单来说工厂模式可以根据不同的条件产生不同的实例(相同的类型),工厂模式把这些实例的

具体过程封装起来了,简化了客户端的应用,也改善了程序的扩展性,使得将来可以做最小的改动就可以加入新的待创建的类

为何如此常用?

因为工厂模式就相当于创建实例对象的new,我们经常要根据类class生成实例对象,如Aa=newA()工厂模式也是用来创建实例对象的,所以以后new时要多个心眼

是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但是会给你的系统带来更大的可扩展性和尽量少的修改量

案例:

我们以类Sample为例,我们要创建Sample的实例对象:Samplesample=newSample();可是实际情况是通常我们都要在创建sample实例时做点初始化的工作,比如:

赋值,查询数据库等

首先想到的就是使用Sample的构造函数,这样生成实例就写成:Samplesample=newSample(参数);创建实例化时所作的初始化工作不像赋值那么简单,可能是很长

的代码写入构造函数中,那么你的代码将会很难看(为何?)-----初始化工作如果是很长的一段代码,说明要做的工作很多,将很多工作装入一个方法中,

相当于将很多的鸡蛋放在一个篮子里,是很危险的,这也有悖于Java面向对象的原则,面向对象的封装和分派告诉我们,尽量将长的代码分派切割成每段,

将每段再封装起来(减少段与段之间耦合联系性),以后如果需要修改,只要更改每段,不会再发生牵一动百的事情

工厂模式中有:工厂方法(FactoryMethod),抽象工厂(AbstractFactory),这两个模式区别在于需要创建对象的复杂程度上

@1.工厂方法:

建立一个专门生产Sample实例的工厂:

publicclassFactory{

publicstaticSamplecreator(intwhich){

//getClass产生Sample一般可使用动态类装载入类

if(which==1)

returnnewSampleA();

elseif(which==2)

returnnewSampleB();

那么在你的程序中,如果要实例化Sample,就使用SamplesampleA=Factory.creator(1);

这样在整个涉及到Sample的具体子类,达到封装的效果,也就减少错误修改的机会通俗来讲:即具体的事情做得越多,越容易犯错

使用工厂方法要注意几个角色,首先你要定义产品接口,如上面的Sample,产品接口下有接口的实现类,如SampleA,其次要有一个factory类,用来生成产品Sample

进一步稍微复杂点,就是在工厂类上进行扩展,工厂类也有继承它的实现类concreateFactory了

@2.抽象工厂

如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Sample,如果我们还有新的产品接口Sample2,假设Sample和Sample2均有两个concrete类SampleA(B)

那么,我们就将上例中的Factory扩展成抽象工厂:

publicabstractclassFactory{

publicabstractSamplecreator();

publicabstractSample2creator(Stringname);

publicclassSimpleFactoyextendsFactory{

publicSamplecreator(){

....................

publicSample2creator(Stringname){

returnnewSample2A();

publicclassBombFactoryextendsFactory{

..........

returnnewSample2B();

从上面看到两个工厂各自生产出一套Sample和Sample2,也许你会产生疑问,为什么我不可以使用两个工厂方法来分别生产Sample和Sample2?

抽象工厂还有另外一个关键要点,是因为SimpleFactory内,生产Sample和生产Sample2的方法之间有一定联系,所以才要将这两个方法捆绑在一个类中。

@三、值对象模式--成为不同层或不同模块之间数据交换的标准方法,体现的是数据的封装,也有利于对象的复用。

问题:应用程序客户端需要与企业Bean之间交换数据,程序间交换数据---基于客户需要与EJB之间大量滴交换数据的情况,具体说来,在J2EE平台中,应用程序通常将服务器端

注意的是:多数情况这些方法的调用目的是为了取得单一的信息,例如用户名或者用户地址等

显而易见,在J2EE平台上,这种调用基本上都是远程的,也就是说,用户多次调用相应的方法会给Web带来极大的负担,即使用户和EJB容器加载相同的JVM、OS和计算机

运行EJB程序,由于方法调用被缺省地认为是远程任务,所以这种问题依然存在

方案:值对象(valueobject)模式通过减少分布式通信的消息而促进数据的交换,通常这里说指的通信是在web层和EJB层之间。在一个远程调用中,一个单一值对象可以被用来

当EJB使用值对象的时候,用户可以通过仅仅一次方法调用来取得整个对象,而不是使用多次方法调用以得到对象中每个域的数值;由于值对象是通过值传递来交送给用户

的,所以对于该值的调用或取值都是本地调用,而不是远程方法调用。需注意:这个值对象必须对应于每个属性的访问方法,或者将所有属性都设为公共的

例子:

假设某名为project的业务对象被模拟或者实现为一个实体bean,当客户端调用值对象的getProjectData()方法时,该project实体bean需要通过该值对象向客户端发送数据

publicclassProjectVOimplementsjava.io.Serializable{

privateStringprojectId;

privateStringprojectName;

privateStringmanagerId;

privateStringcustomerId;

privateDatastartDate;

privateDateendDate;

privatebooleanstarted;

privatebooleancompleted;

privatebooleanaccepted;

................

//Valueobjectconstructors

以下就是具体的每一个get和set方法

@四、DAO模式

问题;目前大部分的J2EE应用程序都需要在一定程度上使用可持久的数据,而实现持久性数据的方法因应用程序不同而异,且访问不同存储格式数据的应用程序接口也有显著的差别

当程序组件,即实体bean、会话bean或servlet、jsp等需要访问数据源时,它们会使用正确的应用程序接口来得到连接并管理数据源,但这样也会造成这些组件与数据程序源

之间的依赖关系,从而使得应用程序很难从一个数据存储实体移植到另一个数据存储实体中去;当数据源的物理实现变化的时候,应用程序也相应地加以改变

如何对存储层以外的模块屏蔽这些复杂性,以提供统一的调用存储实现?

方案:

(1)业务对象:表示数据的用户,它需要对于数据的访问,一个业务对象可以用会话bean、实体bean或是其他Java程序来实现

(2)数据访问对象:是这种模式的主题,它提供了底层数据访问的对象,并将其提供给业务对象以使得后者能够透明地访问数据源;同时业务对象也将数据的加载和存储

操作移交给数据访问对象处理。

(3)数据源:这里指的是数据源的物理实现,这个数据源可以是一个数据库,包括关系型数据库、面向对象数据库或文件系统

(4)值对象:指的是数据载体,数据访问对象可以使用值对象来向用户返回数据,而数据访问对象同样可以从用户那里得到值对象来对数据源中的数据进行更新

应用实例:

抽象的DAOFactory类

publicabstractclassDAOFactory{

publicstaticfinalintCLOUDSCAPE=1;

publicstaticfinalintORACLE=2;

publicstaticfinalintSYBASE=3;

publicabstractCustomerDAOgetCustomerDAO();

publicabstractAccountDAOgetAccountAO();

publicabstractOrderDAOgetOrderDAO();

publicstaticDAOFactorygetDAOFactory(intwhichFactory){

switch(whichFactory){

caseCLOUDSCAPE:

returnnewCloudscapeDAOFactory();

caseORACLE:

returnnewOracleDAOFactory();

caseSYBASE:

returnnewSybaseDAOFactory();

......

default:

returnnull;

具体的DAOFactory的实现:

publicclassCloudscapeDAOFactoryextendsDAOFactory{

publicabstractCustomerDAOgetCustomerDAO(){

returnnewCloudscapeCustomerDAO();

publicabstractAccountDAOgetAccountAO(){

returnnewCloudscapeAccountDAO();

publicabstractOrderDAOgetOrderDAO(){

returnnewCloudscapeOrderDAO();

4.3:Customer的基本DAO接口

publicinterfaceCustomerDAO{

publicintinsertCustomer(.....);

publicbooleandeleteCustomer(....);

publicCustomerfindCustomer(....);

........

4.4.Customer的CloudscapeDAO实现

publicclassCloudscapeCustomerDAOimplementsCustomerDAO{

publicCloudscapeCustomerDAO(){初始化;}

publicintinsertCustomer(.....){....};

publicbooleandeleteCustomer(....){.....};

publicCustomerfindCustomer(....){......};

4.5:Customer值对象

publicclassCustomerimplementsjava.io.Serializable{

intCustomerNumber;

Stirngname;

StringstreetAddress;

Stringcity;

.......//getterandsettermethods

4.6:使用DAO和DAO工厂-----客户端代码

//创建一个DAO工厂

DAOFactorycloudscapeFactory=DAOFactory.getDAOFactory(DAOFactory.DAOCLOUDSCAPE);

//创建一个DAO

CustomerDAOcustDAO=cloudscapeFactory.getCustomerDAO();

//创建一个用户

intnewCustNo=custDAO.insertCustomer(.....);

//查找到一个用户

Customercust=custDAO.findCustomer(.....);

//设置参数

cust.setAddress(...);

cust.setEmial(...);

//更新

custDAO.updateCustomer(cust);

..................等等其他操作

第三章Java程序设计和模式应用

前面我们讲到了两个面向对象的设计原则:

一是针对接口编程,而不是针对实现编程

二是优先使用对象组合,而不是类继承

下面我们讲学习其他的常见的面向对象的设计原则:

1.开放-封闭法则(OCP)即对新增开放,对修改封闭。而且应尽量做到不用修改模块的源代码,就能更改模块的行为。

认为我们应该设计出永远也不需要改变的模块,我们可以添加新代码来扩展系统的行为。我们不能对已有的代码进行修改

符合OCP的模块需满足两个标准:

1)可扩展,即“对扩展是开放的”,---模块的行为可以被扩展,以满足新的需求

2)不可更改,即“对更改是封闭的”----模块的源代码是不允许进行改动的

如何去做呢?

1)抽象2)多态3)继承4)接口

一个软件系统的所有模块不可能都满足OCP,但是我们应该努力最小化这些不满足OCP的模块数量

开放-封闭法则是OO设计的真正核心

符合该法则便意味着最高等级的复用性和可维护性

2.依赖性倒置原则:

就是依赖抽象而不要依赖具体的实现

3.接口隔离原则:

就是不要使用通用的接口,而是为不同的用户使用不同的接口

4.替换原则:

即子类应当可以替换父类并出现在父类能够出现的任何地方

类设计的基本经验:

类要单一

加强内聚,松散耦合

好的封装性

类的粒度要合理

实现类不能依赖它的使用类

应考虑灵活性,也就是可配置、可维护

要考虑性能,考虑可伸缩性

要考虑今后可能的变化,也就是可扩展性

要考虑合理的复用

要合理的考虑接口和抽象类的使用

尽量减少类与协作类的交互次数和交互信息的量

父类不应知道子类的信息,子类必须知道父类的信息

更多的使用类的组合,而不是继承

访问对象必须通过接口,不能绕过接口直接访问

分层:最典型的三层架构,表现层--》逻辑层--》数据层

表现层功能:展示数据、人机交互、收集参数调用逻辑层

数据层功能:实现数据持久化、实现对象和持久化数据的双向映射

层间交互的基本原则:

1.表现层调用逻辑层,逻辑层调用数据层,不可反过来!!

2.层间交互也应该通过接口进行调用,以确保各层的实现独立变化

THE END
1.宠物店员工服务手册.docx甲方(盖章):___乙方(签字):___签订日期:___一、附件列表:1.宠物店员工服务手册2.国家劳动法律法规3.社会保险制度相关规定4.甲方公司规章制度5.乙方个人简历或身份证明文件6.工作绩效考核标准7.工资条和加班费计算明细8.解除或终止合同的书面通知9.经济补偿计算公式和标准二、违约行为及认定:1.乙方未按照甲方要...https://www.renrendoc.com/paper/341758592.html
2.跟一连锁宠物店店长聊了一聊他们店的kpi是每月15w营收(服务+商品销...跟一连锁宠物店店长聊了一聊 他们店的kpi是每月15w营收(服务+商品销售),单店每月服务收入有7w左右,好的月份可以到9w。美容师分两级6个人,中级美容师底薪4200+20%提成,高级6000+30%提成,他是店长,每月1万左右收入,完成了KPI可以拿到。服务标准化,门店覆盖内客户复购很好。 https://xueqiu.com/9774008390/221266677
3.单选题教育民政文化宣传部门,在()范围内负责国防教育工作。C. 宠物店 D. 服装店 E. 物流快递 查看完整题目与答案 中国联通智慧社区平台是面向()社区管理与服务类应用。 A. 政府 B. 企业 C. 物业 ...【单选题】人眼由( )组成。 查看完整题目与答案 【单选题】道德是人类社会生活中依据社会舆论、传统习惯和( ),以善恶评价为标准的意识、规范、行为和活动...https://www.shuashuati.com/ti/f67bb96443694ba5bb6e4ab7ec75be82.html
1.创业方案(精选10篇)精神产业无疑是低成本的,而且在精神产业这方面学校内绝对是无人问津,在学生好奇心的驱使下 Romantic mail在学校内定能掀起一波热潮,Romantic mail的Romantic气息能吸引大量情侣,让我们为之提供服务。 (4)消费市场及购买力行为分析 Romantic mail帮客户保存信件的收费标准是这样的,一年为25元,两年为30元,每增加一年,费...https://www.hrrsj.com/wendang/qitafanwen/95110.html
2.假期“上门喂猫”走红,但这些问题还待解决—新京报今年2月5日,网友SwayKei在微博上表示,自己在一家名为pidan的宠物用品公司的天猫旗舰店购买了春节期间连续7天上门喂猫服务。但2月4日到2月5日11点一直没人上门,猫断水断粮超过24个小时,饿得啃塑料袋。 新京报记者了解到,作为一项新兴服务行业,宠物猫狗上门喂养尚缺乏相关行业标准,喂养服务的质量好坏主要由服务提供...https://www.bjnews.com.cn/news/2019/10/14/636166.html
3.春节上门喂猫遛狗成热门服务盒马在沪试点上门喂宠但也有网友在社交平台上表示,盒马定价略贵,要高出个人接单好几十元,因此不会考虑。 春节部分时段已约满 多宠物店上线春节上门喂宠服务 海报新闻记者注意到,近期许多上海宠物店也在团购平台上线了春节上门喂养的订购链接,定价多在50至100元之间,还有部分宠物店在详情页标明,会根据距离远近和宠物数量收取差价,团购页...https://m.jnnews.tv/guanzhu/p/2024-01/13/1026894.html
4.创新创业网上店铺计划书(通用6篇)2、做创意:“拒绝平淡,追求创意”,从来都是我们前进的方向。在淘宝店步入正轨以后还要继续寻找厂家合作! 七. 网店目前主要产品或服务介绍 1、产品生产 : 资源及原材料供应 :各大批发市场、生产厂家等 产品标准、质检和生产成本控制 :本着为顾客负责的心态仔细挑选商品,或发现损坏禁止出售。信誉永远大于谋利。 https://www.yjbys.com/chuangye/ziliao/chuangyejihuashu/632753.html
5.销售人员必须掌握的销售技巧(通用12篇)1、回款,高于一切, 2、回款,方法总比问题多。 3、 按标准流程回款 4、回款六字诀:利、理、情、压、纵、缠 5、见招拆招:识别客户拖欠货款的借口 七、成交,不是终点――做好客户维护 成交,并不意味着销售的结束,成交后的售后服务也是一个不容忽视的工作重点,只有售后服务上做到位了,下足工夫,让客户笑到最...https://www.360wenmi.com/f/filee6ers5va.html
6.雪束小胖子猫笼子宠物家用猫柜猫屋兔笼猫舍繁育猫笼宠物店寄养柜...雪束小胖子猫笼子宠物家用猫柜猫屋兔笼猫舍繁育猫笼宠物店寄养柜室内 折叠猫笼单层单... 分享 收藏 已选 送至 北京朝阳区三环到四环之间 评价 *** 商品介绍 售后保障 包装清单 商品参数 服务承诺 京东商城向您保证所售商品均为正品行货,京东自营商品开具机打发票或电子发票。凭质保证书及京东商...http://item.m.jd.com/product/10111422437600.html
7.拓客工作总结标准化的服务做到了,就是那暖心的亲客服务! 拓客工作总结2 一、 8月拓客基本情况 拓客执行时间:20x年7月25日——20x年8月31日 拓客执行点位: 二、拓客执行情况分析 拓客地图 1、 拓客策略: 第一阶段:因项目客户地缘性较强,结合项目于竞品分析、意向客户分析制定拓客地图;首次拓客采用撒网式拓客,基于拓客地图...https://www.cnfla.com/gongzuozongjie/2724743.html
8.宠物店项目计划书(推荐10篇)国际宠物市场逐渐成熟,养宠物已经成为一个国家经济实力和社会发展的标志。世界宠物经济的快速发展带动了相关产业的快速发展,并逐步规范化、标准化和国际化。宠物的数量和宠物的经济效益逐年快速增长。人们对宠物的溺爱促进了宠物产品销售和宠物服务业的逐步成长和发展。宠物经济、宠物食品销售、宠物产品、宠物美容店、宠物...https://m.zwlu.com/word/841380.html
9.保险精英分享楔单大作用助力客户维护.ppt公安机关业务技术用房建设标准(建标130-2010).. 22页猜你喜欢 工程管理职业规划策划书 5页 工业销售员职业发展规划与管理 11页 小语种教室职业规划设计 6页 2024年不透明石英炉衬项目成效分析报告 69页 2023年度物流项目评估分析报告 51页 家政服务店商业计划书 8页 室内设计学生职业发展规划 9页 宠物店网店商业...https://m.taodocs.com/p-222024794.html
10.开店计划书范文一项目名称:进口零食店 产品和服务:零食、坚果、 饮料、水、特色小吃、网上代购代售 选择理由:根据我们目前的地理位置,处于校园周边,周边无特色店面,有足够的消费人群,我们是做零食销售的,所以一年四季都有卖点,我们个人有营销经验 、计划和想法。 主要经营范围:当代大学生、校内学生、老师和工作人员以及周边的居住人...https://www.oh100.com/a/202208/5048834.html
11.软件实例分享,宠物店兽医电子处方开单系统软件教程兽医处方软件以下教程以 佳易王宠物店兽医电子处方软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 问:宠物医院电子处方单子使用的纸张大小是多少? 答:处方单使用A5纸张打印,也就是A4的一半。 问:可以多个账号登录软件吗? 答:软件默认管理员的账号是 1234 ,密码 1234 ,管理员可以设置其他...https://blog.csdn.net/qq_29129627/article/details/136106312
12.模拟经营类游戏推荐模拟经营类单机游戏排行在游戏中,玩家需要在这里经营自己的咖啡店。玩家需要学会制作不同种类的咖啡,以满足不同客户的不同需求,吸引更多客人赚取收入,并不断升级自己的咖啡店,以开设连锁店。欢迎有兴趣的合作伙伴下载! 立即下载 哈士奇萌宠屋免费版 模拟经营·123.46M 推荐理由:哈士奇萌宠屋是一款有趣的模拟经营游戏。游戏主要关注宠物...https://www.4399i.net/heji/932.html
13.怎么解除抖音小店限制1000单?具体方法是什么?注意,根据外部申请或限单后的投诉消除订单数量限制的店家,不容易取消新手标志。当天zui大订单信息量只有1000单。 服务平台每天评价店铺整体运营能力,评价标准包括订单数量、评价、开设实体店时间、感觉得分(评价≥80%、开设实体店时间≥7天、感觉得分≥4.4分)等。 https://product.11467.com/info/13744186.htm