设计模式
Hammond_
这个作者很懒,什么都没留下…
展开
-
设计模式总结
核心目标 管理变化,提高复用 抽象思想代替分解思想 八大原则 依赖倒置原则(所有可能变化的实现类都依赖于稳定接口) 开闭原则(不改变已有类的结构,使用扩展的方式开发) 单一职责(不要将与class对象无关的功能放置在一个class中) 重构技法 静态------动态 早绑定--------晚绑定 继承---------组合 编译时依赖----------运行时依赖 紧耦合---------松...原创 2020-01-15 22:12:37 · 92 阅读 · 0 评论 -
解析器
动机:业务规则频繁变化,类似结构不断重复出现 class Expression{ public int interpreter(Map<String,int> list); } class StringExpression extends Expression{ @Override public int interpreter(Map<String,int> lis...原创 2020-01-15 22:13:20 · 104 阅读 · 0 评论 -
访问器
动机:由于类层次变化,导致违背开闭原则 class Element{ public void fun1(); //改变 public void fun2(); } class E1 extends Element{ public void fun1(){ /... } //改变 public void fun2(){ /*** } } class E2 extends...原创 2020-01-15 22:13:39 · 129 阅读 · 0 评论 -
命令模式
动机:原创 2020-01-15 22:14:31 · 82 阅读 · 0 评论 -
职责连
动机:一个请求被多个对象处理,但是每个请求限定运行时只能有一个接受者,也就是在同一时间只能被一个对象处理 class ChainRequest{ ChainRequest cr; public boolean canHandle(); public void process(); public boolean hasNext(){ ... } public void next()...原创 2020-01-15 22:14:24 · 84 阅读 · 0 评论 -
迭代器
动机:集合内部对象变化,虚妄不暴露内部结构同时让外部代码访问其中元素 class Iterator<T>{ public void first(); public T next(); public boolean hasNext(); public Iterator<T> Iterator(); } class MyCollection implements It...原创 2020-01-15 22:14:18 · 92 阅读 · 0 评论 -
组合模式
动机:由于有些对象独特的数据结构,原创 2020-01-15 22:15:13 · 107 阅读 · 0 评论 -
备忘录模式
动机:要求程序回溯到对象之前处于某个节点时的状态,如果使用一些公有接口来获取对象状态,这样会暴露细节实现 class Memento{ }原创 2020-01-15 22:15:07 · 89 阅读 · 0 评论 -
状态模式
动机:对象的状态经常面临变化,但是对象又需要有效的管理原创 2020-01-15 22:15:09 · 112 阅读 · 0 评论 -
中介者模式
动机:为了解“组件"和”元素“之间的耦合,模型变化了页面元素也必须跟着变化,需要有一个控制中心来解决他们之间的依赖 这种关系就像是模板方法模式,多个对象间之间才需要解耦合,如果对象之间没有依赖关联,那么也没必要使用该模式 ...原创 2020-01-15 22:13:05 · 71 阅读 · 0 评论 -
适配器
动机:对象改变环境的时候,对象无法完美的与新环境结合,给“迁移的变化”影响了 class Target{ public void process(); } class Adaptee{ public void foo(); public int bar(); } class oldAdaptee implement Adaptee{ @Override public void foo...原创 2020-01-15 22:15:00 · 75 阅读 · 0 评论 -
代理模式
动机:对象创建开销很大,某些操作需要安全控制,或者需要进程外的访问 class IA{ public void precess(); } class A implements IA{ @Override public void precess(){...} } class ClientApp{ IA ia; public void doingSomething(){ .....原创 2020-01-15 22:16:41 · 84 阅读 · 0 评论 -
门面(Facade)模式
动机:接口之间如果有依赖,需要添加一层(稳定)接口解耦合 例如: 假设A方案是MYSQL的连接模型,如果按照A方案设计的话,客户需求改动(改成ORACLE),那么A方案中子类的代码改动就会非常大 假设B方案,子类还是需要改动,但是Facade向外暴露的是相同的接口,所以外部的方法不用变化 也就是Facade向外提供了一个(稳定)的接口 Facade设计模式更重要的是从架构层次看系统,主要是隔离作...原创 2020-01-15 22:16:38 · 146 阅读 · 0 评论 -
享元模式
动机:大量的对象(几万个,几十万个)导致程序内存需求变得非常大,享元模式就能解决当前问题(线程池,常量池) class Font{ String key; } class FontFactory{ private HashMap<String,Font> fontPool; public Font getFont(String key){ if(fontPool.con...原创 2020-01-15 22:16:32 · 78 阅读 · 0 评论 -
单例模式
动机:对于面向对象编程,总会有对象的存在,有时候希望在系统中只需要一个实例,这时候可以从性能上考虑优化使用单例模式 class SingleClass{ //c++需要声明这个私有构造器, private SingleClass singleClass; public Lock lock; private SingleClass(){ ... } //线程不安全 public Si...原创 2020-01-15 22:16:11 · 106 阅读 · 0 评论 -
构建器模式
动机:创建一个复杂的对象,这个对象各个部分剧烈变化,但是组合到一起却相对稳定(跟Template Method很像) 在这里插入代码片原创 2020-01-15 22:15:27 · 100 阅读 · 0 评论 -
原型模式
动机: 隔离某些结构复杂的对象创建工作 class ISplitter{ public void split(); } class ISplitterFactory{ public ISplitter createISplitter(...); } class FileSplitter extends ISplitter implements ISplitterFactory{ @Ove...原创 2020-01-15 22:15:25 · 81 阅读 · 0 评论 -
抽象工厂
动机:一系列相互依赖的对象创建,为了避开new所带来的紧耦合原创 2020-01-15 22:17:54 · 84 阅读 · 0 评论 -
工厂模式
动机:传统创建对象必须用new的方式,为了解决new带来的紧耦合 缺点:每个create方法返回对象都必须参数相同,因为他们都继承了SpilitterFactory基类 class Splitter{ void split(); } class FileSplitter extends Splitter{ @Override void split(){ //... } } clas...原创 2020-01-15 22:17:48 · 91 阅读 · 0 评论 -
面向对象设计原则
设计模式就是为了让代码复用性提高,所谓的复用性就是将需求变化带来的变化影响到最小 多态就能很好体现了抽象带来的便利,由一个对象接口多种不同的实现,转而交给程序判断对象应该是什么样子 衡量设计模式使用的是否正确,应该用尺子(面向对象设计原则)衡量 依赖倒置原则:稳定的类和不稳定的类中依赖关系分离出来,将他们共同指向并依赖于一个抽象的对象(由JVM编译器管理(多态接口,继承)) 高层模块(稳...原创 2020-01-15 22:18:25 · 86 阅读 · 0 评论 -
Template Method
Template Method主要利用抽象方法给应用提供扩展点,并在方法中实现控制反转,被Template Method调用的抽象方法可以protected 在方法中需要知道需求中变化点和相对稳定的地方,将其区分开来,稳定的部分放入方法中,变化的部分做成抽象方法暴露给子类,让子类自己实现,这样实现了晚绑定 public class templateMethodTest{ protected vo...原创 2020-01-15 22:18:19 · 87 阅读 · 0 评论 -
Strategy
动机:算法经常改变,算法编写到对象中会使得对象复杂,而且有时候支持不适用的算法也是一种负担 (if-else过多的时候,需要小心,判断条件是否会改变) public enum country{ china, japan, france, africa//改变 } class sale{ TaxBase tb; public void calculate(){ if(tb == c...原创 2020-01-15 22:13:54 · 95 阅读 · 0 评论 -
Observer(观察者模式)
动机:对某些对象建立一种“通知依赖关系”,一个对象改变了,所有的依赖对象都将得到通知 编译式依赖:A依赖B,编译的时候编译A的时候B必须存在 需求:将一个东西变成两份(int整型),并通知返回到前端 class A{ int num; TextObject to; public A(int n,TextObject temp){ this.num=n; this.to=temp; ...原创 2020-01-15 22:12:09 · 106 阅读 · 0 评论 -
装饰模式
动机:由于多重的继承带来的重复很多代码,为了解决这种子类衍生问题 class Stream{ public void seek(){ ... } } class FileStream extends Stream{ @Override public void seek(){ ... } } class NetworkStream extends Stream{ @Overr...原创 2020-01-15 22:11:47 · 89 阅读 · 0 评论 -
Bridge模式
动机:由于某些类型具有多种不同方向的变化(平台与实现),应对多维度的变化解耦合 class Message{ public login(){ ... } public play(){ ... } } class PCMessage extends Message{ @Override public play(){ ... } } class PEMessage extends Mes...原创 2020-01-15 22:17:35 · 127 阅读 · 0 评论