份培训设计模式.ppt_第1页
份培训设计模式.ppt_第2页
份培训设计模式.ppt_第3页
份培训设计模式.ppt_第4页
份培训设计模式.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

Java核心技术 设计模式 本章目标 了解23种设计模式 掌握常用几种设计模式 设计模式简介 单例模式 工厂模式 代理模式 适配器模式 主要内容 设计模式 Design Patterns: Elements of Reusable Object- Oriented Software( Gang of Four(GOF)95是软 件模式的开创性著作 用来解决代码复用,避免程序大量修改的一些成熟的套 路或者方法 用了设计模式会使项目复杂度增加,开发成本增加,但 维护成本降低,灵活性更好,扩展性更强 创建类型的模式( Creational ) 结构类型的模式( Structural ) 行为类型的模式( Behavioral ) 创建类型的模式 创建类型的模式如何有效地创建类的实例 单例模式(Singleton) 构建模式(Builder) 原型模式(Prototype) 简单工厂模式(Simple Factory) 抽象工厂模式(Abstract Factory) 工厂方法模式(Factory Method) 结构类型的模式 结构类型的模式将类和对象组合起来,以构成更加复杂的 结构 ,帮助开发人员将简单对象组合在一起形成更加复杂 的结构,处理对象与对象之间的各种关系 代理模式(Proxy) 适配器模式(Adapter) 装饰者模式(Decorator) 组合模式(Composite) 桥连接模式(Bridge) 蝇量模式(Flyweight) 外观模式(Facade) 行为类型的模式 行为类型的模式主要是处理对象之间通讯的模式 , 帮助 开发人员控制类之间的通讯 策略模式(Strategy) 状态模式(State) 责任链模式(Chain of Responsibility) 解释器模式(Interpreter) 命令模式(Command) 观察者模式(Observer) 备忘录模式(Memento) 迭代器模式(Iterator) 模板方法模式(Template Method) 访问者模式(Visitor) 中介者模式(Mediator) 设计原则 逻辑代码独立到单独的方法中,注重封装性-易读,易复 用。不要在一个方法中,写下上百行的逻辑代码。把各小 逻辑代码独立出来,写于其它方法中,易读,可重复调用 。 模块间松耦合、模块内紧耦合。 熟练运用继承的思想: 找出应用中相同之处,且不容易发生变化的东西,把它们 抽取到抽象类中,让子类去继承它们; 熟练运用接口的思想: 找出应用中可能需要变化之处,把它们独立出来,不要和 那些不需要变化的代码混在一起。 继承与接口 不管黑猫白猫,只要抓得到老鼠,都是好猫 猫:抓老鼠、叫、颜色各异 第一种方法:(一次性代码) 直接编写出各种猫的类,各类有三个方法: quack():叫 catch():抓老鼠 display():颜色 猫的共性:抓老鼠、叫、 猫的个性:颜色(黑白) 黑猫、白猫 运用继承 public class Cat public void quack() /呱呱叫 System.out.println(“呱呱叫”); public void catch() /抓老鼠 System.out.println(“抓老鼠“); public abstract void display(); /*因为外观不一样,让子类自己去决定了。*/ 对于它的子类只需简单的继承就可以了,并实现自己的display()方法。 /白猫 public class WhiteCat extends Duck public void display() System.out.println(“白猫.”); /黑猫 public class BlackCat extends Duck public void display() System.out.println(“黑猫.“); 运用接口 public class Cat public void quack() /呱呱叫 System.out.println(“呱呱叫”); public abstratact void display(); /*因为外观不一样,让子类自己去决定了。*/ public interface ICatch public void catch(); /白猫 public class WhiteCat extends Cat implements ICatch public void display() System.out.println(“白猫的颜色.”); public void catch() /实现该方法 /黑猫 public class BlackCat extends Cat/ implements ICatch public void display() System.out.println(“黑猫的颜色.“); 小结 继承的好处:让共同部分,可以复用.避免重复编程. 继承的不好:耦合性高.一旦超类添加一个新方法,子类都 继承,拥有此方法,若子类相当部分不实现此方法,则要进 行大批量修改.继承时,子类就不可继承其它类了. 接口的好处:解决了继承耦合性高的问题.且可让实现类, 继承或实现其它类或接口. 接口的不好:不能真正实现代码的复用. SINGLETON模式 概念:单例模式确保某一个类只有一个实例,而且自行实 例化并向整个系统提供这个实例。单例模式只应在有真正 的“单一实例”的需求时才可使用 场景:读取配置文件、Socket链接、数据库资源等 public class SingletonA private static SingletonA s; public static SingletonA getInstance() if (s = null) s = new SingletonA(); return s; SingletonA single=SingletonA.getInstance(); 简单工厂模式 概念:简单工厂模式是由一个工厂对象决定创建出哪一种 产品类的实例。 工厂(Creator)角色 :简单工厂模式的核心,它负责实 现创建所有实例的内部逻辑。工厂类可以被外界直接调用 ,创建所需的产品对象。 抽象产品(Product)角色 :简单工厂模式所创建的所有 对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色:是简单工厂模式的 创建目标,所有创建的对象都是充当这个角色的某个具体 类的实例。 实例 见实例。 简单工厂模式 优点:通过使用工厂类,外界可以从直接创建具体产品对 象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可 以了。而不必管这些对象究竟如何创建及如何组织的 缺点:它所能创建的类只能是事先考虑到的,如果需要添 加新的类,则就需要改变工厂类了。 思考 女娲造人:帮我造个叫张三的人吧! 抽象工厂模式 概念:抽象工厂模式可以向客户端提供一个接口,使得客 户端在不必指定产品具体类型的情况下,创建多个产品族 中的产品对象。这就是抽象工厂模式的用意。 抽象工厂(Creator)角色 具体工厂(Concrete Creator)角色 抽象产品(Product)角色 具体产品(Concrete Product)角色 抽象工厂模式 抽象工厂模式面对的问题是多产品等级结构的系统设计 学习抽象工厂具体实例之前,应该明白两个重要的概念: 产品族和产品等级。 产品族:是指位于不同产品等级结构中,功能相关联的产 品组成的家族。比如AMD的CPU和AMD芯片的主板,组成一 个家族。Intel的CPU和Intel芯片的主板,又组成一个家 族。而这两个家族都来自于两个产品等级:CPU,主板。 一个等级结构是由相同的结构的产品组成,示意图如下: 实例 农场主引进塑料大棚技术,在大棚里种植热(Tropical) 和亚热带(Northern)的水果(Fruit)和蔬菜(Veggie ),用以满足市场需求,获取更大的利益 实例 生产水果 生产蔬菜 实例 见实例。 抽象工厂模式 创建同使用分开 降低耦合度 可扩展性 思考 女娲造人:阴绳女人或雌兽;阳绳男人或雄兽;甩出 来泥土像人型即造人类,像兽类则造野兽。 代理模式 概念:对其他对象提供一种代理以控制对这个对象的访问 。 好处: -是可以在间接访问对象的同时,要其前或后,添加其它 的逻辑代码。 -对原来逻辑进行添加其它逻辑,最终生成新的逻辑。 即:对类的方法添加一些额外的逻辑,生成新的方法逻辑。 静态代理 静态代理: 一个原类与一个代理类要一一对应。 两者都实现共同的接口或继承相同的抽象类; 只是在代理类中,实例化原类,在原类方法的前后添加 新的逻辑。 实例 见实例。 动态代理 动态代理: Java动态代理类位于Java.lang.reflect包下,一般主要 涉及到以下两个类: 1)Interface InvocationHandler:该接口中仅定义了一个方法: invoke(Object obj,Method method, Object args) obj一般是指代理类, method是被代理的方法,args为该方法的参数数组。这个抽象方法在代理类 中动态实现。 2)Proxy:该类即为动态代理类,其中主要包含以下内容:Static Object newProxyInstance(ClassLoader loader, Class interfaces, InvocationHandler h):返回代理类的一个实例,返回后的代理类可以当作 被代理类使用。所谓Dynamic Proxy是这样一种class:它是在运行时生成的 class,在生成它时你必须提供一组interface给它,然后该class就宣称它实 现了这些 i

温馨提示

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

评论

0/150

提交评论