设计模式
其实系一个须刨
这个作者很懒,什么都没留下…
展开
-
访问者模式
在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 创建元素对象: public interface ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); } 元素实体类 public class Keyboard implements Com原创 2021-01-09 18:12:35 · 58 阅读 · 0 评论 -
解释器模式
解释器模式提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文 表达式接口 public interface Expression { public boolean interpret(String context); } 表达式实现类 public class TerminalExpression implements Expression { private String data; public TerminalExpr转载 2021-01-09 17:43:45 · 58 阅读 · 1 评论 -
中介者模式
提供了一个中介类,该类通常处理不同类之间的通信 中介者类: public class MessageBroad { public static void showMessage(User user, String message){ System.out.println(new Date().toString() + " [" + user.getName() +"] : " + message); } } 用户类 public clas原创 2021-01-09 17:04:18 · 54 阅读 · 0 评论 -
责任链模式
责任链模式为请求创建了一个接收者对象的链。 管理者虚类 abstract public class Manager { // 此管理者的上级 protected Manager superior; public Manager(Manager manager) { this.superior = manager; } // 申请请求 abstract public void RequestApplication(); } 管理者原创 2021-01-09 01:23:10 · 79 阅读 · 0 评论 -
命令模式
是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 一个命令接口: public interface Order { void execute(); } 创建一个请求类: public class Stock { private String name = "ABC"; private int quantity = 10; public vo...转载 2021-01-06 00:47:00 · 82 阅读 · 0 评论 -
迭代器模式
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器接口: public interface Iterator { public boolean hasNext(); public Object next(); } public interface Container { public Iterator getIterator(); } 创建实现了Container接口的实体类。 public class NameRepository implem..原创 2021-01-06 00:18:47 · 60 阅读 · 0 评论 -
备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。 备忘录类,用来储存状态 public class Memento { private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } } 发起人类 pu...原创 2021-01-04 00:24:12 · 50 阅读 · 0 评论 -
状态模式
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。过程中创建表示各种状态的对象和一个行为随着状态对象改变而改变的主体 状态接口 public interface State { public void doAction(Context context); } 两个状态 import java.util.Calendar; public class Morning implements State{ @Override public...原创 2021-01-03 23:38:12 · 62 阅读 · 0 评论 -
观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。 观察的对象类 import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private i原创 2021-01-02 22:55:05 · 64 阅读 · 1 评论 -
模板模式(十五)
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板类 public abstract class Game { abstract void initialize(); abstract void startPlay(); public final void play(){原创 2021-01-02 21:18:59 · 61 阅读 · 0 评论 -
工厂方法模式(十四)
工厂方法模式 是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。 灵活性增强,对于新产品的创建,只需多写一个相应的工厂 animal抽象类 interface Animal { public void eat(); } animal实现类 public class Cow implements Animal{ @Override publi原创 2021-01-02 18:25:10 · 66 阅读 · 0 评论 -
策略模式(十三)
策略模式 定义一些列的算法,把他们一个封装起来,并且可以互相替换。使得算法可以独立于使用它的客户而变化。 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。 public interface Strategy { public int doOperation(int num1, int num2); } public class OperationAdd implements Strategy{ @Override public int do原创 2021-01-02 01:21:13 · 62 阅读 · 0 评论 -
设计模式(十二):代理模式,动态代理与静态代理
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 优点:1、职责清晰。 2、高扩展性。 3、智能化。 缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。 例子: 如果你想找个歌星出台唱歌,你不直接和歌星接触,而是先找...原创 2020-02-16 22:17:27 · 74 阅读 · 0 评论 -
设计模式(十一):享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有...转载 2020-02-16 22:05:13 · 85 阅读 · 0 评论 -
设计模式(十):外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 优点:1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。 缺点:不符合开闭原则,如果要改东西很麻烦,继承...转载 2020-02-16 21:55:42 · 66 阅读 · 0 评论 -
设计模式(九):装饰模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。 缺点:多层...原创 2020-02-16 21:51:19 · 113 阅读 · 0 评论 -
设计模式(八):组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 优点:1、高层模块调用简单。 2、节点自由增加。 缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。 例子: 员工类 im...转载 2020-02-16 21:17:04 · 86 阅读 · 0 评论 -
设计模式(七):桥接模式
桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 桥接(Bridge)模式的优点是: 由于抽象与实现分离,所以扩展能力强; 其实现细节对客户透明。 缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。 例子: 如果现在要大中小三只笔,要绿红...原创 2020-02-16 18:13:55 · 81 阅读 · 0 评论 -
设计模式(六):适配器模式
将一个类的接口转换成客户希望的另外一个接口,Adapter模式让原来由于接口不兼容二不能一起工作的那些类可以一起工作。 类适配器模式代码: 例子:视频软件读rmvb和avi制式 创建rmvb的接口 public interface RMVBplayer { void play(); } 创建rmvb的实现 public class RMVBplayerImpl imple...原创 2020-02-16 11:13:02 · 98 阅读 · 0 评论 -
设计模式(五):原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数...转载 2020-02-09 00:13:39 · 82 阅读 · 0 评论 -
设计模式(四):建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。...转载 2020-02-09 00:04:44 · 74 阅读 · 0 评论 -
设计模式(三):抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机...转载 2020-02-08 21:51:20 · 118 阅读 · 1 评论 -
设计模式(二):工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 目的: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类实例化延迟到其子类。 优点: 1、一个调用者想创建一个对象...原创 2020-02-08 18:11:06 · 75 阅读 · 0 评论 -
设计模式(一):单例模式
目标: 保证一个类只有一个实例,并提供一个访问它的全局访问点。 特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一实例。 场景: 1. 类只能由一个实例,且客户可以从一个总所周知的访问点访问它。 2. 唯一实例应该是通过子类化可扩展的,并且客户无需更改代码就能使用一个扩展的实例。 优点: 1、...原创 2020-01-03 23:24:25 · 99 阅读 · 0 评论