Java设计模式

参考设计模式之禅。

 策略模式

负责对扣款策略进行封装,保证两个策略是可以自由切换的,而且日后增加扣款策略也是非常简单容易的。


 工厂方法模式
  
<pre name="code" class="java"> 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。(产品的实例化工作是由类工厂来决定的。)
修正策略模式必须对外暴露具体策略的问题,由工厂方法模式直接产生一个具体策略对象,而其他模块则不需要依赖具体的策略。(根据传入的参数,来确定返回的对象。工厂方法模式是对实例化过程进行封装而形成的,客户对象无须关心实例化这些类的细节,把它们交给工厂类)门面模式负责对复杂的扣款系统进行封装,封装的结果就是避免高层模块深入子系统内部,同时提供系统的高内聚、低耦合的特性。(封装得很彻底,不设计到逻辑业务)封装封装(高内聚,低耦合的特性,后面改动系统不叫灵活) 鲁棒是Robust的音译,也就是健壮和强壮的意思。它是在异常和危险情况下系统生存的关键。


高内聚、低耦合


单一职责原则

里氏替换原则

依赖倒置原则  (依赖的三种写法  构造函数传递依赖对象或者参数、setter方法传递依赖对象或者参数、接口声明依赖对象,也叫接口注入)

接口隔离原则

迪米特法则

开闭原则 



代理模式 包含aop介绍

AOP术语, 在什么地方(连接点)  执行什么行为(通知)

切面 Aspect 切入点 JoinPoint  通知 Advice 织入 Weave


<!-- 配置事务的传播特性 -->
<tx:advice id="txAdviceMysql" transaction-manager="MysqltxManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />


<!--
将save、delete、modify开头的事务之外的事务全部设置 为只读事务,这样也可以在一定程序上提高系统性能
-->


<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="search*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>


<!-- 配置那些类的那些方法参与事务 -->
<aop:config>
<aop:pointcut id="allMagangerMethods" expression="execution(* com..service..*(..))" />
<aop:advisor pointcut-ref="allMagangerMethods" advice-ref="txAdviceMysql" />
</aop:config>


在这个 allMagangerMethods地方 ,执行 txAdviceMysql行为


--2.<bean id="interceptor" class="com.wepull.interceptor.Interceptor"></bean>

<!-- 配置AOP  -->
<!-- 第一个* 代表所有的返回的类型   第二个*代表所有的对象 -->
<aop:config>
<aop:aspect ref="interceptor">
<aop:before method="beforTime" pointcut="execution(public * com.wepull.printer.*.printer(..))"/>
<aop:after method="afterTime" pointcut="execution(public * com.wepull.printer.*.printer(..))"/>
</aop:aspect>
</aop:config>


在这个 execution(public * com.wepull.printer.*.printer(..))地方 ,执行 interceptor.beforTime等行为


————————————————————————————————————————————————————

享元模式

内存溢出包括:

1.内存泄漏:无意识的代码缺陷,导致内存泄漏,jvm不能获得连续的内存空间。

2.对象太多:代码写得太烂,产生的对象太多,内存被耗尽。



毫无影响,java编译时就会确定方法的偏移量。java会自动装载,所以方法数量不是问题。

不过过多的方法和行数会对解读造成影响,造成可读性差。另外一些计算测试代码覆盖率的程序无法处理过多行的代码。

外界处于可读性的考虑,要求处理类的代码不可以超过2000行,一个方法不可以超过500行。

对速度没有影响,对生成.class文件的大小有影响,对jvm 加载jar的速度有影响
追问
如果最后生成的class不封装到jar中,那么class文件的大小,对于调用时的速度就没有太多影响了?
追答
jvm 加载jar都是预加载,没必要考虑速度问题。.class文件的大小不影响调用速度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章