设计模式之java解析
设计模式之java解析
量天尺VS流彩虹
这个作者很懒,什么都没留下…
展开
-
21、访问者模式
简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。 public interface Visitor { public void visit(Subject sub); } public class MyVisitor implements Visitor { @Override public void visit(Subject sub) { System.out.println("v原创 2021-06-21 09:16:06 · 61 阅读 · 0 评论 -
23、解释器模式
解释器(Interpreter)模式:定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种行为型模式。 public interface Expression { public int interpret(Context context); } public class Plus implements Expression { @Override public int interpret(Context conte原创 2021-06-22 15:01:49 · 51 阅读 · 0 评论 -
22、中介者模式
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用 public interface Mediator { public void createMediator(); public void workAll(); } public class MyMedia原创 2021-06-22 15:01:33 · 97 阅读 · 0 评论 -
20、状态模式
根据这个特性,状态模式在日常开发中用的挺多的,尤其是做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等。 意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 主要解决:对象的行为依赖于它的状态(属性),代码中包含大量与对象状态有关的条件判断时,可以根据它的状态改变而改变它的相关行为。 public class State { private String value; public String getValue() {原创 2021-06-21 09:15:51 · 60 阅读 · 0 评论 -
19、备忘录模式
何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态。 public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Or原创 2021-06-21 09:15:30 · 61 阅读 · 0 评论 -
18、命令模式
这个很好理解,命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开,熟悉Struts的同学应该知道,Struts其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想! public interface Command { public void exe(); } public class MyCommand implements Command { private Receiver receiver; public MyCommand(Receiver原创 2021-06-21 09:15:13 · 42 阅读 · 0 评论 -
17、责任链模式
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。Tomcat中的Filter就是使用了责任链模式 ...原创 2021-06-21 09:10:57 · 49 阅读 · 0 评论 -
16、迭代子模式
迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。 public interface Collection { public Iterator iterator(); public Object get(int i); //取得集合元素 public int size(); //取得集合大小 } public interface Iterator { public Object previous(); //前移 public Obje原创 2021-06-21 09:10:32 · 69 阅读 · 0 评论 -
15、观察者模式
定义 观察者模式:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。 意义 此设计模式最重要的作用就是 解耦!将观察者与被观察者解耦,使得他们之间的依赖性更小。 public interface Observer { public void update(); } public class Observer1 implements Observer { @Override public void update() { S原创 2021-06-21 09:10:15 · 45 阅读 · 0 评论 -
14、模板方法模式
主要思想:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。 public abstract class AbstractCalculator { public final int calculate(String exp,String opt){ //final 禁止重写 主方法,实现对本类其它方法的调用 int array[] = split(exp,opt); return calculate原创 2021-06-21 09:09:58 · 39 阅读 · 0 评论 -
13、策略模式
策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。 主要思想:使不同的算法可以被相互替换,而不影响客户端的使用 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。 缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。 public interface ICalculator { public int calculate(String exp); } pub原创 2021-06-21 09:09:34 · 51 阅读 · 0 评论 -
12、享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式 public class ConnectionPool { private Vector<Connection> pool; private String url = "jdbc:mysql://localhost:3306/test"; private String username =原创 2021-06-21 09:09:12 · 47 阅读 · 0 评论 -
11、组合模式
经典案例:系统目录结构;文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。 public class TreeNode { private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>(); public TreeNode(String name){ this.name原创 2021-06-18 17:10:14 · 57 阅读 · 0 评论 -
10、桥接模式
适配器:改变已有的两个接口,让他们相容。 桥接模式:分离抽象化和实现,使两者的接口可以不同,目的是分离。 所以说,如果你拿到两个已有模块,想让他们同时工作,那么你使用的适配器。如果你还什么都没有,但是想分开实现,那么桥接是一个选择 public interface Sourceable { public void method(); } public class SourceSub1 implements Sourceable { @Override public void met原创 2021-06-18 17:08:14 · 64 阅读 · 0 评论 -
9、外观模式
外观模式是为了解决类与类之间的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度 public class CPU { public void startup(){ System.out.println("cpu startup!"); } public void shutdown(){ System.out.println("cpu shutdown!"); } }原创 2021-06-18 17:06:53 · 54 阅读 · 0 评论 -
8、代理模式
1.静态代理 public interface Sourceable { public void method(); } public class Source implements Sourceable { @Override public void method() { System.out.println("the original method!"); } } public class Proxy implements Sourceable {原创 2021-06-18 17:05:41 · 54 阅读 · 0 评论 -
7、装饰器模式
public interface Sourceable { public void method(); } public class Source implements Sourceable { @Override public void method() { System.out.println("the original method!"); } } public class Decorator implements Sourceable { pri原创 2021-06-18 17:03:51 · 56 阅读 · 0 评论 -
6、适配器模式
(1).类的适配器: /** *拓展源类 */ public class Source { public void method1() { System.out.println("this is original method!"); } } /** *拓展目标类 */ public interface Targetable { public void method1(); public void method2(); } /** *适配器 *原创 2021-06-18 16:26:28 · 43 阅读 · 0 评论 -
5、原型模式
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。 /** *浅克隆 */ public class Pig implements Cloneable{ private String name; private Date birthday; @Override protected Object clone() throw原创 2021-06-18 16:22:41 · 56 阅读 · 0 评论 -
4、建造者模式
建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节 public class Meal { private String food; private String drink; public String g原创 2021-06-18 16:20:30 · 57 阅读 · 0 评论 -
3、单例模式
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。 public class Singleton { // 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 private stati原创 2021-06-18 16:17:46 · 46 阅读 · 0 评论 -
2、抽象工厂模式
简介:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式 特点:同一产品簇下的产品用同一工厂,如:机枪和机枪子弹属于同一产品簇,手枪和手枪子弹属于同一产品簇。 public interface Gift { //声明产品赠品的接口,当然也可以是抽象类,同样为了简单就不声明方法了 } public class GiftA implements Gift {原创 2021-06-18 16:11:58 · 83 阅读 · 0 评论 -
1.工厂方法模式
**简介:**工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 **意义:**工厂的目的是为了帮我们解决创建对象实例的问题,并且工厂能够隐藏类名及对象创建的细节,让我们无需关心对象的创建。提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。 缺点:如果产品类过多,要生成很多的工厂类。 public interface Provider { //接口 public Sender produce(); } pu原创 2021-05-28 17:30:04 · 43 阅读 · 0 评论 -
0.简单工厂模式
简介:又叫做静态工厂方法(StaticFactory Method) 模式, 但不属于 23 种设计模式之一。列在此处仅作对比用。 缺点:不符合开闭原则,如果你要加一个产品类C,你就要修改工厂类里面的生成产品的 代码示例 public interface Product { //声明类所需继承的共同接口,也可以是抽象类 } public class ProductA implements Product { public ProductA() { System.out.p原创 2021-05-28 17:27:27 · 46 阅读 · 0 评论