java设计模式-系列一.pptx_第1页
java设计模式-系列一.pptx_第2页
java设计模式-系列一.pptx_第3页
java设计模式-系列一.pptx_第4页
java设计模式-系列一.pptx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java设计模式分类 Java设计模式从大的方向来分大概分为以下几种 创建模式 创建模式包含了单例模式,工厂模式,抽象工厂模式,建造模式 和原型模式 结构模式 结构模式包含了适配器模式,桥梁模式,代理模式, 享元模式,组合模式,装饰模式,门面模式 行为模式 行为模式包含了责任链模式,策略模式,模板模式,备忘录模式 ,观察者模式,状态模式,命令模式,迭代子模式,访问者模式, 解释器模式,调停者模式 第 2 页 设计模式特点一览 l万事交给子类 模板方法 模式(Template Method ) 工厂模式(Factory Pattern) l建立对象实例 单例模式(Singleton Pattern) 原型模式(Prototype Pattern) 构建者模式(Builder Pattern) 抽象工厂模式(Abstract Factory) l割接性思考 桥接模式(Bridge Pattern) 策略模式(Strategy Pattern) 适配器模式(Adapter Pattern) l一视同仁 组合模式(Composite Pattern) 装饰者模式(Decorator Pattern) l在结构中穿梭 迭代器模式(Iterator Pattern) 访问者模式(Visitor Pattern) 职任链模式(Chain Of Responsibility) l精简不浪费 享元模式(Flyweight Pattern ) 代理模式(Proxy Pattern) l用类来表法 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 状态模式(State Pattern) l简单最好 外观模式(Faade Pattern) 中介者模式(Mediator Pattern) l管理状态 观察者模式(Observer Pattern) 备忘录模式(Memento Pattern) 状态模式(State Pattern) 单例模式(线程安全,建议使用该写法) class InternalSingleton private static class SingletonHolder private final static InternalSingleton INSTANCE=new InternalSingleton(); private InternalSingleton() public static InternalSingleton getInstance() return SingletonHolder.INSTANCE; 简单工厂模式 Public abstract 水果 public abstract void eat() ; Public class 苹果 extends 水果 public void eat() System.out.println(“吃了一个苹果”); Public class 梨子 extends 水果 public void eat() System.out.println(“吃了一个梨子”); Public class 水果工厂 public 水果 create(String type) if(type.equals(“苹果”) return new 苹果(); else if(type.equals(“梨子”) return new 梨子(); else return null ; 抽象工厂模式 Public abstract class 抽象农场主 public abstract 水果工厂 createFruitFactory() ; public abstract 蔬菜工厂 createVegeFactory (); Public class 农场主 extends 抽象农场主 public 水果工厂 createFruitFactory() return new 水果工厂(); public class 蔬菜工厂 createVegeFactory () return new 蔬菜工厂(); Public class 水果工厂 public 水果 create(String type) /根据type获取水果 return new 水果实现类(); Public class 蔬菜工厂 public 蔬菜 create(String type) /根据类型获取蔬菜 return new 蔬菜实现类(); 在这里抽象农场主就是抽象工厂,农场主则为抽象工厂的实现,通过农场主可以获取到水果产品工厂和蔬菜产 品工厂,这样的目的就是为了能够将各类不同的产品逻辑不纠缠在一个对象中,而是分别进行处理 建造模式 建造模式即是指给出一个抽象的接口,用来规范产品对象的各个组成成分的建造。举个例子,建造一个房子,那么就需要建墙,建门,装修等操作,做完这些操 作就可以得到一个房子 Public abstract class 抽象房子建造 public abstract void 建墙(int num) ; public abstract void 建门(int num); public void 装修() Sytem.out.println(“默认给个简单装修”); Public class 普通房子建造 extends 抽象房子建造 private 房子 house ; public 房子建造者() this.house = new 房子(); public void 建墙(int num) /根据num修建num面墙 ; public void 建门() /根据num修建num面门 ; public 房子 getHouse() return this.house(); Public class 建造过程 public void createHouse(抽象房子建造 houseBuilder) houseBuilder.建墙(1); houseBuilder.建门(3); houseBuilder.装修(); /得到房子 房子 house = houseBuilder.getHouse(); 这里主要注意的地方是,建房子的这个流程是不变的,所以才能采用建造模式,如果某个房子按照这个流程建不起来,那么建房子就不能采用建 造模式,那么,如果有一栋房子还必须添加一个 建阳台 的流程,那么,在保留这个流程的情况下该如何做呢 我使用装饰模式做法如下 Public 特殊房子建造 extends 普通房子建造 /阳台数目 protected int balconyNum = 0 ; public 特殊房子建造者(int balconyNum ) this.house = new 房子(); this. balconyNum = balconyNum ; /装饰模式即不改变原有接口,但增强了某些接口的功能 protected void 建阳台() /根据阳台数目建造阳台 public void 装修() /在装修之前我先建个阳台 建阳台(); /然后进行装修 super.装修(); Public static void main(String args) 建造过程 product = new 建造过程(); 抽象房子建造 houseP = new特殊房子建造 (2); product. createHouse(houseP ); 这样我新建了一个房子建造对象,在不改变建造过程的情况下增强了普通房子建造时的装修功能,让房子能够拥有两个阳台,这里 也对装饰模式做了个了解,装饰的目的就是在不改变原有逻辑的情况下增强某些功能 结构模式适配器模式 适配器模式就是把一个类的接口变换成客户端所期待的另一种接口,从 而使原本接口不匹配而无法在一起工作的两个类能够在一起工作, 适配器可分为三个对象,一个是目标对象,一个是适配器,一个是源对 象 而适配器有两种,一种是类的适配模式,一种是对象的适配模式,两个的 差别在于类的适配器是继承了源对象同时实现目标对象,然后调用源对 象的方法去实现目标对象的接口;而对象的适配器则是通过引用源对象 ,然后调用源对象的方法去实现目标对象的接口;大家看下类图基本就 能明白了 类适配器类图 对象适配器类图 类适配器代码示例 public interface ITarget / Methods void Request(); /外部库 public class Adaptee / Methods public void SpecificRequest() System.out.println(“Called SpecificRequest()“ ); / “Adapter“ public class Adapter extends Adaptee implements ITarget / Implements ITarget interface public void Request() / Possibly do some data manipulation / and then call SpecificRequest this.SpecificRequest(); public class Client public static void main(String args) ITarget t = new Adapter(); t.Request(); 对象适配器代码示例 public interface ITarget / Methods void Request(); /外部库 public class Adaptee / Methods public void SpecificRequest() System.out.println(“Called SpecificRequest()“ ); / “Adapter“ public class Adapter implements ITarget Adaptee adaptee = new Adaptee(); public void Request() adaptee.SpecificRequest(); public class Client public static void main(String args) ITarget t = new Adapter(); t.Request(); 代理模式 代理模式的精髓即在于通过代理对象控制对源对象的引入,起到一个中介的作用 抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地 方都可以使用代理主题。 代理主题(Proxy)角色:代理主题角色内部含有对真是主题的引用,从而可以在任何时候操作真实主 题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体 ;控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常 在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的将调用传递给真实主 题对象。 真实主题角色(RealSubject)角色:定义了代理角色所代表的真实对象。 桥梁模式 桥梁模式所涉及的角色有: 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定 义。 实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。 必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口 可以非常不一样。实现化角色应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论