
设计模式
山一程~
知我者谓我心忧,不知我者谓我何求。
展开
-
设计模式-----计算器简单工厂模式
简单工厂模式就是使用父类指针指向实例化对象,思考到底使用多态要实例化谁,将来增加一个单独的类来创造实例,但是在外观实现上还是使用之前的父类指针。下面以一个面向对象思想的计算器程序来实现简单工厂模式。class interator{ protected double ValueA; protected double ValueB; public void setA(double s...原创 2019-04-20 22:56:44 · 966 阅读 · 0 评论 -
设计模式------建造者模式
建造者模式又叫生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。如果用了建造者模式,那么用户只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道。在上图中Builder是控制大致流程的抽象类或接口。ConcreteBuilder是集成Builder后重...原创 2019-05-09 17:05:53 · 219 阅读 · 0 评论 -
设计模式----迪米特法则
迪米特法则也叫最少知识原则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。在类的结构设计上,每一个类都应当尽量降低成员之间的访问权限,这一点和类的封装特性不谋而合。所以迪米特法则的根本思想强调了类之间的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。...原创 2019-05-09 15:29:28 · 203 阅读 · 0 评论 -
设计模式------外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式应用场景有三:1. 在设计初期阶段,应该有意识的将不同的层分开,比如经典三层架构数据访问层、业务逻辑层、表示层。2. 在开发阶段,子系统不断重构越来越复杂,很多类最好提供一个fade进行接口封装,减少他们之间的依赖。3. 维护大型系统时,提供fade管理陈旧代码,新开发的代码只与...原创 2019-05-09 11:52:38 · 162 阅读 · 0 评论 -
设计模式------模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是通过把不变行为搬移到超类,去除子类中重复代码,以体现它的优势。模板方法模式提供了一个很好的代码复用平台。所以,当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方...原创 2019-05-09 11:45:33 · 166 阅读 · 0 评论 -
设计模式------代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理一般分为几种:远程代理、虚拟代理、安全代理等。远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。虚拟代理:是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样就可以达到性能的最优化,比如说打开一个很大的html网页,里面有很多图片和文字,但还是可以很快的打开它,...原创 2019-04-29 23:45:42 · 157 阅读 · 0 评论 -
设计模式----原型模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式就是从一个对象再创建另一个可定制对象,而且不需知道任何创建的细节。省去了new对象时调用构造函数等的开销,只需一个clone函数即可搞定对象创建。创建对象时因为是新建对象所以和C++一样存在浅拷贝和深拷贝的问题。举例来讲,像MemberwiseClone()方法,如果字段是值类型的,则对该字段执行逐位复制,如...原创 2019-05-08 11:13:38 · 174 阅读 · 0 评论 -
设计模式----装饰模式
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。下面举两个例子实现相同的一个人穿衣的功能流程,比较有无装饰模式的区别,装饰模式把所需的功能按正确的顺序串联起来进行控制,感觉封装的更好。装饰模式结构图:Component是定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加...原创 2019-04-29 15:53:53 · 145 阅读 · 0 评论 -
设计模式------依赖倒转原则和里式替换原则
依赖倒转原则原话解释抽象不应该依赖细节,细节应该依赖对象,也就是要针对接口编程,不要对实现编程。官方定义两方面:A.高层模块不应该依赖底层模块,两个都应该依赖抽象;B.抽象不应该依赖细节,细节应该依赖抽象。对于抽象,所谓依赖了抽象的接口或抽象类就不怕更改,还需要介入介绍里式替换原则。里式替换原则:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且他察觉不出父类对象和子类对象的...原创 2019-04-29 01:03:04 · 168 阅读 · 0 评论 -
设计模式------工厂方法模式
工厂方法模式主要与简单工厂模式相比较,通过前面的文章“计算器简单工厂模式”可知,简单工厂模式的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。设想:如果新加一个运算比如开放,我们一方面要加开方类(这是扩展),另一方面我们要在工厂类中加case条件(这是修改),所以违背了开—闭原则。工厂方法模式定义一个用于创建对象的接口,...原创 2019-04-28 23:42:34 · 114 阅读 · 0 评论 -
设计模式------策略模式
策略模式:他定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响使用算法的客户。父类Strategy定义所有算法的公共接口,比如说不管打折、原价、或者满减模式,都会得到一个价格的接口getResult()伪代码示例:// 抽象算法父类abstract class father{ // 算法方法 public void fun();...原创 2019-04-23 23:28:29 · 136 阅读 · 0 评论 -
设计模式------单一职责原则和开—闭原则
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意向不到的破坏。比如说俄罗斯方块游戏,考虑哪些是界面,哪些是逻辑,然后封装成不同的类。软件设计真正要做的许多内容就是发现职责并把那些职责相互分离,如何判断是否应该分离出类来,就...原创 2019-04-26 00:06:43 · 264 阅读 · 0 评论 -
设计模式------抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。首先回顾工厂方法模式,定义一个用于创建对象的接口,让子类决定去实例化哪个类。下面通过一个改进程序来引出工厂方法模式的思考方式。首先看一个没有涉及模式的例子:/* * * 无任何涉及模式,在一个数据库中添加数据和查询 * */class user{ String _name; int ...原创 2019-05-24 16:51:10 · 226 阅读 · 0 评论