设计模式小计——23种设计模式2


模板方法模式Template Method Pattern
定义一个操作的算法的框架,是的子类可以不改变算法结构即可重定义该算法一些特定步骤
public abstract class AbstractClass{//抽象模板类
protected abstract void method1();//算法步骤1
protected abstract void method2();//算法步骤2
public void templateMethod(){//模板方法,定义算法结构
this.method1();this.method2();
}
}
public class ConcreateClass extends AbstractClass{//具体模板类
protected void method1(){}
protected void method2(){}
}
封装不变部分(模板方法),扩展可变部分(算法步骤)
行为由父类控制,子类实现
建造者模式Builder Pattern
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
//产品类
public class Product{
public void method(){}
}
//抽象建造者
public abstract class Builder{
public abstract void setPart();//产品类逻辑处理
public abstract Product buildProduct();
}
//具体建造者
public c1ass ConcreateBulider extends Builder{
private Product product = new Product();
public void setPart(){}
public Product buildProduct(){return product;}
}
//产品构建类
public class Direct{
private Builder builder = new ConcreateBulider();
public Product getAProduct(){//构建不同产品
builder.setPart();
//产品逻辑处理
return builder.buildProduct();
}
}
建造者模式关注的是产品类零件类型和装配顺序,这是它与工厂方法模式最大的不同。
建造者模式最主要的功能是基本方法的调用顺序安排,顺序不同产生对象不同。
代理模式Proxy Pattern
为其他对象提供一种代理以控制对这个对象得访问
其他许多模式,如状态模式,策略模式,访问者模式本质上都是在特殊场合采用得代理模式
//抽象主题类
public interface Subject{
public void request();//定义访问方法
}
//真实主题类
public class ReadSubject extends Subject{
public void request(){}//真实访问方法
}
//代理类
public class Proxy extends Subject{
private Subject subject = null;//要代理的类
public Proxy(Proxy subject){this.subject=subject}//要代理类
public void request(){subject.request();}//代理实现访问

}
职责清晰,高扩展性,智能化
代理模式扩展
普通代理,客户端只能访问代理角色,不能访问真实角色,真实角色在代理类中被创建,无法在客户端单独创建
Subject subject = new SUbject(this,...);//Proxy类
调用者只知代理而不用知道真实角色,屏蔽了真实角色对高层模块得影响
强制代理,通过真实角色查找代理角色,在真实角色类中创建代理对象,在真实角色类的访问方法中检验代理
虚拟代理,在代理类得每个访问方法中判断真实类是否初始化,如没有,则初始化
动态代理,运行阶段才指定代理对象,使用反射机制(重点)
原型模式Prototype Pattern
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象
核心是实现clone方法,完成对对象得拷贝,实现Cloneable接口,实现clone方法的覆盖(继承自Object)
public class PrototypeClass implements Cloneable{
@Override
public PrototypeClass clone(){
PrototypeClass proto = null;
try{
proto = (PrototypeClass)super.clone();
}catch(CloneNotSupportedException e){}
return proto;
}
}
原型模式是内存二进制流的拷贝,比new一个对象性能好,构造函数不会执行
浅拷贝,深拷贝。Object提供的方法clone只是拷贝对象,其内部的数组,引用对象都不拷贝,还是指向原来的地址。深拷贝可以通过对内部数组,引用进行再次拷贝来实现
中介者模式Mediator Pattern
用一个中介对象封装一系列对象交互,使各对象不需要显示地相互作用,从而使耦合松散,可以独立改变他们之间得交互
//通用抽象中介类
public abstract class Mediator{
protected Colleague1 c1;
protected Colleague2 c2;
//实现setter/getter方法把同事类注入,依赖注入
public abstract void doSomething();
}
//通用中介类
public class ConcreteMediator{
public void doSomething(){
super.c1.method1();
super.c2.method2();
}
}
//抽象同事类
public abstract Colleague(){
protected Mediator mediator;//中介
public Colleague(Mediator mediator){this.mediator=mediator;}
}
//同事类1
public class Colleague1(){
public Colleague1(Mediator mediator){super(mediator);}
public method1(){}//自己的业务逻辑
public depMethod1(){
//内部逻辑
super.mediator.doSomething();//交互业务
}//中介处理
}
public class Colleague2(){
public Colleague2(Mediator mediator){super(mediator);}
public method2(){}//自己的业务逻辑
}
减少类间依赖,降低类间耦合
命令模式Command Pattern
将请求封装成对象,对请求排队或者写入日志,从而提供撤销恢复功能
//通用Receiver类
public abstract class Receiver{//执行方
public abstract void doSomething();//业务功能
}
//具体Receiver类
public class ConcreteReceiver extends Receiver{//具体执行方
public void doSomething(){}
}
//抽象Command类
public abstract class Command{//抽象命令类
public abstract void execute();//执行命令的方法
}
//具体Command类
public class ConcreateCommand extends Command{//具体命令类
private Receiver receiver;
public ConcreateCommand(Receiver receiver){this.receiver=receiver;}
public void execute(){this.receiver.doSomething();//实现命令}
}
//调用者Invoke类
public class Invoke{
private Command command;
public Invoke(Command command){this.command=command;}
public void action(){this.command.execute();//执行命令}
}
请求方和执行方之间没有任何依赖关系,高度封装
命令易于扩展
命令模式的撤销恢复功能,执行方增加一个rollBack()方法用于对任务进行回滚,同时添加命令的撤销命令,调用回滚方法。
  

设计模式小计——23种设计模式2,布布扣,bubuko.com

时间: 2024-10-26 02:31:06

设计模式小计——23种设计模式2的相关文章

设计模式小计——23种设计模式3

责任链模式Chain of Responsibility 使多个对象都有机会处理请求,从而避免请求的发送者和接受者间的耦合关系,并沿着这条链传递请求,直到有对象处理它为止 责任链模式关键是建立链接关系,在链中决定谁来处理请求 //抽象处理者 public abstract class Handle{ private Handle nextHandle;//链的下一个节点 public final Response handleMessage(Request request){ Response

设计模式小计——23种设计模式1

单例模式Singleton Pattern 确保类只有一个实例,而且自行实例化并向整个系统提供这个实例 public class Singleton{ private static final Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getSingleton(){ return singleton; } } 节省内存开支,减少性能开销,应用启动产生单例对象,永久驻留内

JAVA设计模式总结之23种设计模式

一.什么是设计模式                                                                                                                                        设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于

23种设计模式综合实例应用目录

突然发现学所到的知识并不能满足日常工作的需要,便想起了设计模式,在此以北风网的Java设计模式全面解析(23种设计模式综合实例应用)课程为蓝本,以文本的形式记录各种设计模式的介绍.使用方法.优缺点.使用场景等. 观看地址:http://www.ed2000.com/ShowFile.asp?FileID=153245 1.简单工厂模式 2.工厂方法模式

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式【转】

23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) 7. Bridge(桥接) 8. Composite(组合) 9. Decorator(装饰) 10. Facade(外观) 11. Flyweight(享元) 12. Proxy(代理) 行为型 13.

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式全解析

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 总原则:开闭原则(Open C

c#中的23种设计模式

C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核心是一个抽象工厂类,各种具体工厂类通过抽象工厂类将工厂方法继承下来.如此使得客户可以只关心抽象产品和抽象工厂,完全不用理会返回的是哪一种具体产品,也不用关系它是如何被具体工厂创建的. 抽象工厂模式(Abstract Factory) 抽象工厂模式的主要优点是隔离了具体类的生成,使得客户不需要知道什么