设计模式
文章平均质量分 83
JobsandCzj
Java工程师;中间件研发工程师
展开
-
设计模式之---三种工厂模式
工厂模式可以说是最常见的设计模式之一了,今天我们就来讲一讲三种工厂模式:简单工厂模式,工厂方法模式和抽象工厂模式。简单工厂模式就和它名字一样很简单。你传一个参数,工厂为你造一个类。就好比你向工厂订个货,你提要求,工厂帮你加工完成一样。package factory;public abstract class Operat { public double a; public do原创 2017-04-27 14:16:42 · 630 阅读 · 0 评论 -
设计模式之---组合模式
组合模式:树是最常用的一种数据结构了,组合模式就将这种数据结构用到类的组合上。package composite;public abstract class Component { protected String name; public Component(String name) { super(); this.name = name; } publi原创 2017-05-03 11:01:27 · 454 阅读 · 0 评论 -
设计模式之---迭代器模式
现在很多编程语言都通过发语法糖来支持这种模式了,比如Java的for-each,但我们对这个模式做个了解还是有必要的。package iterator;public interface Iterator { public Object next(); public boolean hasNext(); } package iterator;impor原创 2017-05-03 11:18:35 · 337 阅读 · 0 评论 -
设计模式之---桥接模式
还是举例说明吧!现在有一个问题,那就是手机和手机应用。手机有很多牌子,应用也有很多,那某个手机上的应用,该怎么实现呢。第一种架构:这种架构非常简单,但有个明显的问题,那就是可扩展性差。比如再来一种手机或者应用,那类又得增加好几个。他虽然符合开放封闭原则,但却违背了职责单一性原则,即一个类应该只有一个引起它变化的原因。这个时候,桥接模式就派上用场了。从UML类图里我们就能看出来,原创 2017-05-04 10:23:50 · 409 阅读 · 0 评论 -
设计模式之---命令模式
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。package command;public class Receiver { public void doSomething(){ System.out.println("接收者执行业务逻辑处理"); } }原创 2017-05-04 11:42:20 · 396 阅读 · 0 评论 -
设计模式之---中介者模式
有时候,几个对象之间会相互影响,我们把这些会相互影响的对象叫做”同事“,如果我们显示地去执行他们之间的相互影响的话,代码会变得很臃肿并且难以维护。所以我们引入中介者来帮我们维护他们之间的相互关系,这样就减少了系统耦合。比如,在一个能量守恒的系统里,两股能量是此消彼长,但总和不变。我们要用代码模拟并且每股能量都是单独的一个对象的话,这个关系我们便可以用中介者来维护。package media原创 2017-05-04 14:11:48 · 306 阅读 · 0 评论 -
设计模式之---享元模式
下面来个实例,大家应该就明白了。package flyweight;public interface Flyweight { void operate();}package flyweight;public class FlyweightA implements Flyweight { @Override public void operate() { // TODO原创 2017-05-05 09:30:07 · 382 阅读 · 0 评论 -
设计模式之---解释器模式
解释器模式是个不怎么常用的设计模式。我们先来举一个简单的例子说明它。a+b-c这么一个表达式,+,-都是非终结符表达式,a,b,c都是终结符表达式。非终结表达式一般是文法中的运算符或者关键字,而终结表达式一般是文法中的运算单元。package interpreter;import java.util.HashMap;import java.util.Map;public clas原创 2017-05-05 19:04:57 · 294 阅读 · 0 评论 -
设计模式之---访问者模式
package visitor;public interface IVisitor { void visit(Element element); }package visitor;public abstract class Element { public abstract void accept(IVisitor visitor); public abstract原创 2017-05-05 19:46:33 · 501 阅读 · 0 评论 -
设计模式之---总结
前面已经把设计模式都介绍了一遍,最后做个总结。先说分类:可根据模式的目的即模式是用来做什么的将模式分为三类:创建型( Creational)、结构型( Structural)、或行为型( Behavioral )三种。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。Java设计模式之创建模式包括:Factory,原创 2017-05-06 18:42:29 · 761 阅读 · 0 评论 -
设计模式之---前言
准备总结一下各种设计模式,在总结之前,我想先来聊一聊什么是设计模式?为什么要用设计模式?设计模式有哪些特点和优点?对于很多新手来说,代码只要能正确运行,可能就万事大吉了。有时候,这么想可以,比如说你自己尝试个什么东西,做个小玩意,A一道题什么的。过去了就过去了,不会再管他了,那自然跑对就行。但我们在做项目时,我们得有工程化思想。那就是我们得明白两个道理,一:我们要与其他人合作,要有团队精神和合原创 2017-04-27 08:06:22 · 793 阅读 · 3 评论 -
设计模式之---备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。很好理解,就像我们以前打通关游戏一样,打通某个关卡,就会备份一下,不然根本通不了关。。package memento;//备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。public class Memento {原创 2017-05-03 10:25:41 · 390 阅读 · 0 评论 -
设计模式之---状态模式
很多东西处于不同状态会有不同的表现,就像我们小时候看的迪加奥特曼,就有三种形态。类作为模拟这个世界的抽象,当然也可以具备这样的属性啦!状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。解决的问题:主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。实例:迪迦奥特原创 2017-05-01 14:50:26 · 429 阅读 · 0 评论 -
设计模式之---适配器模式
适配器模式相对来说比较好理解,生活中经常会遇到这样的事,比如说充电,充电要求电压和充电器提供的电压不一致,就需要一个适配器进行电压适配。编程中,程序的目标接口和一个已经存在的并实现了相应功能的类不一致,这时就要用到适配器模式。package adapter;public class Specific { public void specificRequest() { System原创 2017-04-28 14:49:48 · 317 阅读 · 0 评论 -
设计模式之---装饰者模式
装饰者模式:动态地给一个对象添加一些额外的职责,就功能增加来说,装饰者模式比子类更为灵活。扩展功能,可能很多初学者马上就想到用继承,但其实这种情况下继承并不是非常推荐使用。因为,我们有一个原则:职责单一原则。这很好理解,因为职责单一,这个类就容易被维护,而且容易被复用。这也是我们不提倡用继承的原因,继承有时候会使一个类变得臃肿。所以,我们有没有办法用组合而非继承来拓展功能呢?嗯,装饰者模式来了原创 2017-04-28 14:39:47 · 324 阅读 · 0 评论 -
设计模式之---代理模式
代理模式也是非常常见的一种设计模式,分为静态代理和动态代理。代理模式主要是为了为其它对象提供一种代理以控制这个对象的访问,同时实现一些增强操作。很典型的就是日志操作,Spring的AOP,事务管理等。静态代理:其中的Proxy就是代理类,为BigCar提供代理并实现一些增强操作。package proxy.static_;public interface Car { void原创 2017-04-28 15:55:38 · 366 阅读 · 0 评论 -
设计模式之---观察者模式
观察者模式,又称为发布-订阅(Publish/Subscribe)模式。属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。先来个实例:有三个段位,分别是王者,白银,青铜,他们都是观察者的实例。他们都在观察是否打团了。而subject相当于一个通知者或者说一个主题对象。它向原创 2017-04-29 14:58:38 · 438 阅读 · 0 评论 -
设计模式之---责任链模式
什么是链1、链是一系列节点的集合。2.、链的各节点可灵活拆分再重组。职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。其实刚开始我觉得这个模式和装饰者模式有点像,但两个模式的应用场景是不一样的。装饰者模式是适用于动态添加功能的,而责任链模式则是倾向于处理一个流程操作,原创 2017-04-29 15:22:10 · 348 阅读 · 0 评论 -
设计模式之---策略模式
在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如何灵活地进行策略切换,这就是我们策略模式要做的。Context算是一个上下文对象,来进行策略切换的中间类。package strategy;public interface Strategy { public void operate();原创 2017-04-29 15:38:07 · 258 阅读 · 0 评论 -
设计模式之---模板方法模式
模板这个词我想大家都理解吧。有时候我们抽象一些共性的东西最后能整理出一个模板,我们只需套这个模板,修改一些个性的东西就能完事了。模板方法就是这个道理。package template;public abstract class Template { public void templateMethod(T t) { System.out.println(t); sort();原创 2017-04-29 16:01:44 · 445 阅读 · 0 评论 -
设计模式之---原型模式
原型模式也是一种创建型模式,主要用于对象的复制。原型模式的优点及适用场景:使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。因为以上优点,所以在需要重复地创建相似对原创 2017-05-01 10:35:30 · 293 阅读 · 0 评论 -
设计模式之---外观模式
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。何时使用外观模式:实例:package facade;public class SubSystemOne { public void methodOne() { System.out.println("方法一"); }}package f原创 2017-05-01 13:17:04 · 321 阅读 · 0 评论 -
设计模式之---建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的优点:建造者模式与工厂模式的区别:实例:package builder;public abstract class Builder { protected Product product; public abstract void makeWheel(String w原创 2017-05-01 13:59:34 · 294 阅读 · 0 评论 -
设计模式之---单例设计模式
设计模式(感觉超级烦人)博大精深,这次说说最简单的单例设计模式。//饿汉式public class Single_Hungry { private static Single_Hungry s = new Single_Hungry(); private Single_Hungry() { } public static Single_Hungry getIn原创 2016-04-26 16:42:40 · 395 阅读 · 0 评论