摘要:观察者模式又叫做发布-订阅模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化...
阅读全文
摘要:建造者模式又叫生成器模式:将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。代码:package xiao;import java.util.ArrayList;import java.util.List;class Product{ List p...
阅读全文
摘要:外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个模式使得这一子系统更加容易使用。外观模式三个阶段:首先,在设计初期阶段,应该要有意识的将不同的两个层分离。其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观可以提供一个简单的接口,减少他们之间的依赖...
阅读全文
摘要:迪米特法则也叫最少知识原则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。迪米特法则的根本思想是强调了类之间的松耦合。类...
阅读全文
摘要:我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模版模式来处理。模版方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模版方法通过把不变行为搬移到超类...
阅读全文
摘要:原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 简单的说就是clone一个对象实例。使得clone出来的copy和原有的对象一模一样。 插一个简单使用clone的例子,如果一个对象内部有可变对象实例的话,public API不应该直接返回该对象的引用,以防调用方的code...
阅读全文
摘要:工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端。代码如下:package xiao;class LeiFeng{ public void s...
阅读全文
摘要:代理模式:为其它对象提供一种代理以控制对这个对象的访问。代码:package xiao;class Girl{ private String name; public void setName(String name){ this.name = name; }}interface GiveGift...
阅读全文
摘要:修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。例如:DataOutputStream dos = new DataOutputStream(new BufferedOutputStre...
阅读全文
摘要:抽象不应该依赖谢姐,细节应该依赖于抽象:针对接口编程,不要对实现编程。例如电脑内的内存坏了不会影响到其它模块,而且什么品牌都可以插入内存插槽,而不仅限于某个品牌的内存条。A。高层模块不应该依赖底层模块,两个都应该依赖抽象。B。抽象不应该依赖细节,细节应该依赖抽象。里氏代换原则(LSP):子类型必须能...
阅读全文
摘要:开放-封闭原则:是说软件实体应该可以扩展,但不可修改。设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。拒绝不成熟的抽象和抽象本身一样重要。
阅读全文
摘要:单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。如果你能够想到多于一个的动机去改变一个类,那...
阅读全文
摘要:首先贴一段代码:package xiao;import java.util.Scanner;class CashSuper{ private int num; private double price; public int getNum() { return num; } public void...
阅读全文
摘要:该篇文章通过一个写计算器控制台程序,来导入文章主题。 首先,要注意代码规范,变量命名有意义,不能随意用A,B,C; 功能要封装好,不要写在一个主函数里,另外要考虑后期需求的更改,如果出现多个函数里面的代码大部分相同,那么我们要学会提取公共行为、属性来构造一个父类,具体的子类来继承父类。继承最...
阅读全文