设计模式
玄月三初
这个作者很懒,什么都没留下…
展开
-
中介者模式(Mediator)
UML类图:代码://抽象同事类abstract class Colleague{ protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator=mediator; }}//抽象中介者类abstract class Mediator{ //定义一个抽象的发送消息的方法,得到同事对象和发送的消息 public abstract void Send(String message,Col原创 2020-06-21 21:49:47 · 146 阅读 · 0 评论 -
桥接模式(Bridge)
UML图:基本代码://Implementor类abstract class Implementor{ public abstract void Operation();}class ConcreteImplementorA extends Implementor{ @Override public void Operation() { // TODO Auto-generated method stub System.out.println("具体实现A的方法执行"); }原创 2020-06-21 21:09:36 · 198 阅读 · 0 评论 -
模板方法模式(TemplateMethod)
模板方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模板方法模式而没有意识到自己已经使用了这个模式。模板方法模式是基于继承的代码复用的基本技术,模板方法模式的结构和用法也是面向对象设计的核心。模式定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特原创 2020-06-21 17:17:18 · 651 阅读 · 0 评论 -
策略模式(Strategy)
UML类图:基本代码://抽象算法类abstract class Strategy{ //算法方法 public abstract void AlgorithmInterface();}//具体算法Aclass ConcreteStrategyA extends Strategy {//算法A实现方法public void AlgorithmInterface() { System.out.println("算法原创 2020-06-21 17:03:54 · 107 阅读 · 0 评论 -
观察者模式(Observer)
UML类图:基本代码:import java.util.ArrayList; abstract class Subject{ private ArrayList<Observer>observers=new ArrayList<Observer>(); public void attach(Observer observer) { observers.add(observer); } public void detach(Observer onserver) {原创 2020-06-21 16:28:02 · 118 阅读 · 0 评论 -
状态模式(State)
UML类图:基本代码:abstract class State{ public abstract void Handle(Context context);}class ConcreteStateA extends State{ @Override public void Handle(Context context) { // TODO Auto-generated method stub context.setState(new ConcreteStateB()); }原创 2020-06-21 16:08:44 · 172 阅读 · 0 评论 -
备忘录模式(Memento)
UML类图:备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以利用该保存的状态实施恢复操作。代码:class Originator{ private String state;//需要保存的属性,可能有多个 public String getState() { return state; } public void setState(String state) { this.state = state; } public原创 2020-06-21 15:34:42 · 134 阅读 · 0 评论 -
组合模式(Composite)
UML类图:组合模式的基本结构代码:Component :是组合中的对象声明接口,在适当的情况下,实现所有类公有接口的默认行为。声明一个接口用于访问和管理Component子部件。Leaf:在组合中表示叶子节点对象,叶子节点没有子节点。Composite:定义分支节点行为,用来存储子部件,在Component接口中实现与 子部件有关的操作,如add和remove等import java.util.ArrayList; abstract class Component{ protected原创 2020-06-21 15:18:54 · 160 阅读 · 0 评论 -
职责链模式( Chain of Responsibility)
职责链模式UML类图:职责链模式( Chain of Responsibillity )职责链模式( Chain of Responsibility ) :使多个对象都有 机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这里发出这个请求的客户端并不知道这当中的哪一个对象 最终处理这个请求,这样系统的更改可以在不影响客户端.的情况下动态地重新组织和分配责任。Handler类,定义一个处理请示的接口。ConcreteH原创 2020-06-21 15:00:26 · 236 阅读 · 0 评论 -
命令模式(Command)
命令模式的UML图:代码:class Receiver { public void Action() { System.out.println("执行请求!"); }}abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } abstract public void Excute();}cl原创 2020-06-21 00:52:54 · 186 阅读 · 0 评论 -
访问者模式(Visitor)
访问者模式的UML图:访问者模式的基本结构代码:import java.util.ArrayList;import java.util.List; abstract class Element{ public abstract void Accept(Visitor visitor);}class ConcreteElementA extends Element{ public void Accept(Visitor visitor) { visitor.VisitConcreteE原创 2020-06-21 00:27:41 · 210 阅读 · 0 评论 -
工厂方法模式(Factory Method)从最初代码到一步步改进
解决的问题:● 将“类实例化的操作”与“适用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。● 即使用者可直接消费产品而不需要知道其生产的细节。简单工厂模式:定义一个创建对象的类,由这个类来封装实例化对象的行为(代码)。工厂类角色Creator:工厂类在客户端的直接控制下(Create方法)创建产品对象。抽象产品拥有角色Product:定义简单工厂创建的对象的父类或它们共同拥有的原创 2020-06-16 20:36:22 · 152 阅读 · 0 评论 -
模板方法模式(Template Method)从最初的代码一步步改进
问题的引入——标准化考试● 考试的例子中,考试题都是相同的,没人的解答可以不同● 定义一个抽象类,将部分逻辑以具体方法以及具体子类的形式实现,然后声明一些抽象方法来破事子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模板方法模板结构图:抽象模板角色有如下的责任:1、定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做进本操作,它们是一个顶级逻辑的组成步骤。(TemplateMethod())2、定义并实现了一个模板原创 2020-05-14 10:45:44 · 171 阅读 · 0 评论 -
策略模式(Strategy Pattern)实现从最初的代码一步步改进
策略模式动机(Motivation)● 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。● 如何在运行时根据需要透明的更改对象的算法?将算法与对象本身解耦,从而避免上述问题?1、商场收银软件● 做一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费。 · 输入单价和数量, · 算出每种商原创 2020-05-14 10:16:08 · 373 阅读 · 0 评论 -
桥接(Bridge)模式 从最初的代码一步步改进
桥接模式的动机: 由于某些类型的固有的实现逻辑,使得它们具有两个乃至多个变化的维度。 如何应对这种“多维度的变化”?如何利用面向对象技术使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?场景描述:● 手机都有通讯...原创 2020-05-01 17:50:37 · 157 阅读 · 0 评论 -
中介者模式(Mediator) 从最初的代码一步步改进
动机:● 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断地变化。● 在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引起关系,从而更好地抵御变化。Mediator模式定义::用一个中介者对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要...原创 2020-04-30 23:18:21 · 155 阅读 · 0 评论 -
适配器(Adapter)模式 从最初的代码一步步改进
动机:● 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是这些现存对象不满足新环境要求的接口。● 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的的接口?**适配器模式:**把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的两种形式:适...原创 2020-04-30 16:49:28 · 219 阅读 · 0 评论 -
外观(门面)模式(Facade Pattern)从最初的代码一步步改进
123原创 2020-04-28 23:33:43 · 131 阅读 · 0 评论 -
代理模式(Proxy Pattern)从最初代码到一步步改进
代理模式产生的动机: 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给会给使用者或者系统节后带来很多麻烦。 如何在不失去透明操作对象的同时来管理/控制这些对象特有的负责性?增加一层间接层是软件开发中常见的解决方式。## 代...原创 2020-04-28 17:48:01 · 161 阅读 · 0 评论 -
享元(Flyweight)模式 从最初代码到一步步实现
问题引入——不同网站具有数据和模板不同,核心代码和数据库是共享的网站类//网站public class WebSite{ private String name=""; public WebSite(String name) { this.name=name; } public void Use() { System.out.println("网站分类:"+nam...原创 2020-04-16 16:37:20 · 95 阅读 · 0 评论 -
单例(Singleton)模式 从最初代码到一步步实现
public class AppConfig{ private String parameterA; private String parameterB; public String getParameterA(){ return parameterA; } public String getParameterB(){ ret...原创 2020-04-14 21:50:21 · 138 阅读 · 0 评论 -
设计模式常用的七大原则
设计模式常用的七大原则有:● 单一职责原则(SRP)● 开放-封闭原则(OCP)——面向对象设计的终极目标● 里氏代换原则(LSP)● 依赖倒转原则(DIP)● 合成/聚合复用原则(CARP)● 接口隔离原则(ISP)● 迪米特法则一、单一职责原则方法一:class Vehicle{ public void run(String vehicle) { ...原创 2020-04-01 22:28:50 · 156 阅读 · 0 评论 -
UML类图
UML类图代码形式<–> 类图●注释●类●接口●类与类之间的关系(ralation) ○依赖(Dependency) ○继承(Inheritance) ○实现(Realization) ○关联(Association) &...原创 2020-03-10 21:51:32 · 172 阅读 · 0 评论 -
用processon画的第一个UML图
原创 2020-03-03 20:32:01 · 642 阅读 · 0 评论
分享