份培训设计模式课件

上传人:石磨 文档编号:182789871 上传时间:2021-05-23 格式:PPT 页数:31 大小:361.50KB
返回 下载 相关 举报
份培训设计模式课件_第1页
第1页 / 共31页
份培训设计模式课件_第2页
第2页 / 共31页
份培训设计模式课件_第3页
第3页 / 共31页
份培训设计模式课件_第4页
第4页 / 共31页
份培训设计模式课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《份培训设计模式课件》由会员分享,可在线阅读,更多相关《份培训设计模式课件(31页珍藏版)》请在金锄头文库上搜索。

1、,Java核心技术,设计模式,本章目标,了解23种设计模式 掌握常用几种设计模式,设计模式简介 单例模式 工厂模式 代理模式 适配器模式,主要内容,设计模式,Design Patterns: Elements of Reusable Object-Oriented Software( Gang of Four(GOF)95是软件模式的开创性著作 用来解决代码复用,避免程序大量修改的一些成熟的套路或者方法 用了设计模式会使项目复杂度增加,开发成本增加,但维护成本降低,灵活性更好,扩展性更强 创建类型的模式( Creational ) 结构类型的模式( Structural ) 行为类型的模式(

2、Behavioral ),创建类型的模式,创建类型的模式如何有效地创建类的实例 单例模式(Singleton) 构建模式(Builder) 原型模式(Prototype) 简单工厂模式(Simple Factory) 抽象工厂模式(Abstract Factory) 工厂方法模式(Factory Method),结构类型的模式,结构类型的模式将类和对象组合起来,以构成更加复杂的结构 ,帮助开发人员将简单对象组合在一起形成更加复杂的结构,处理对象与对象之间的各种关系 代理模式(Proxy) 适配器模式(Adapter) 装饰者模式(Decorator) 组合模式(Composite) 桥连接模式

3、(Bridge) 蝇量模式(Flyweight) 外观模式(Facade),行为类型的模式,行为类型的模式主要是处理对象之间通讯的模式 , 帮助开发人员控制类之间的通讯 策略模式(Strategy) 状态模式(State) 责任链模式(Chain of Responsibility) 解释器模式(Interpreter) 命令模式(Command) 观察者模式(Observer) 备忘录模式(Memento) 迭代器模式(Iterator) 模板方法模式(Template Method) 访问者模式(Visitor) 中介者模式(Mediator),设计原则,逻辑代码独立到单独的方法中,注重封

4、装性-易读,易复用。不要在一个方法中,写下上百行的逻辑代码。把各小逻辑代码独立出来,写于其它方法中,易读,可重复调用。模块间松耦合、模块内紧耦合。 熟练运用继承的思想:找出应用中相同之处,且不容易发生变化的东西,把它们抽取到抽象类中,让子类去继承它们; 熟练运用接口的思想:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。,继承与接口,不管黑猫白猫,只要抓得到老鼠,都是好猫 猫:抓老鼠、叫、颜色各异 第一种方法:(一次性代码)直接编写出各种猫的类,各类有三个方法:quack():叫catch():抓老鼠 display():颜色 猫的共性:抓老鼠、叫、 猫的个性:

5、颜色(黑白) 黑猫、白猫,运用继承,ublic 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.p

6、rintln(“白猫.”); /黑猫 public class BlackCat extends Duck public void display() System.out.println(“黑猫.); ,运用接口,ublic class Cat public void quack() /呱呱叫 System.out.println(“呱呱叫”); public abstratact void display();/*因为外观不一样,让子类自己去决定了。*/ public interface ICatch public void catch(); /白猫public class WhiteCa

7、t 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(“黑猫的颜色.); ,小结,继承的好处:让共同部分,可以复用.避免重复编程. 继承的不好:耦合性高.一旦超类添加一个新方法,子类都继承,拥有此方法,若子类相当部分不实现此方法,则要进

8、行大批量修改.继承时,子类就不可继承其它类了. 接口的好处:解决了继承耦合性高的问题.且可让实现类,继承或实现其它类或接口. 接口的不好:不能真正实现代码的复用.,SINGLETON模式,概念:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式只应在有真正的“单一实例”的需求时才可使用 场景:读取配置文件、Socket链接、数据库资源等,public class SingletonA private static SingletonA s; public static SingletonA getInstance() if (s = null) s = new

9、SingletonA(); return s; ,SingletonA single=SingletonA.getInstance();,简单工厂模式,概念:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 工厂(Creator)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。,实例,见实例。

10、,简单工厂模式,优点:通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的 缺点:它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。,思考,女娲造人:帮我造个叫张三的人吧!,抽象工厂模式,概念:抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。 抽象工厂(Creator)角色 具体工厂(Concrete Creator)角色 抽象产品(Product)角色 具体产品(Concrete Product

11、)角色,抽象工厂模式,抽象工厂模式面对的问题是多产品等级结构的系统设计 学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。 产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的CPU和AMD芯片的主板,组成一个家族。Intel的CPU和Intel芯片的主板,又组成一个家族。而这两个家族都来自于两个产品等级:CPU,主板。一个等级结构是由相同的结构的产品组成,示意图如下:,实例,农场主引进塑料大棚技术,在大棚里种植热(Tropical)和亚热带(Northern)的水果(Fruit)和蔬菜(Veggie),用以满足市场需求,获取更大的利益,实例,生产水果

12、 生产蔬菜,实例,见实例。,抽象工厂模式,创建同使用分开 降低耦合度 可扩展性,思考,女娲造人:阴绳女人或雌兽;阳绳男人或雄兽;甩出来泥土像人型即造人类,像兽类则造野兽。,代理模式,概念:对其他对象提供一种代理以控制对这个对象的访问。 好处: -是可以在间接访问对象的同时,要其前或后,添加其它的逻辑代码。 -对原来逻辑进行添加其它逻辑,最终生成新的逻辑。即:对类的方法添加一些额外的逻辑,生成新的方法逻辑。,静态代理,静态代理: -一个原类与一个代理类要一一对应。-两者都实现共同的接口或继承相同的抽象类;-只是在代理类中,实例化原类,在原类方法的前后添加新的逻辑。,实例,见实例。,动态代理,动态

13、代理: 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, Invocation

14、Handler h):返回代理类的一个实例,返回后的代理类可以当作被代理类使用。所谓Dynamic Proxy是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些 interface。3)在使用动态代理类时,我们必须实现InvocationHandler接口,,适配器模式,概念:适配器模式的意图是将一个已存在的类/接口进行复用,将其转换/具体化成客户希望的另外的一个类/接口 如何实例复用:将要进行复用的类,放到目标类的构造方法中,进行实例化,然后在目标类的相应方法中,进行调用,修改原来方法中的参数,或添加相应的逻辑。即复用了已有类的原来方法。,实例,见实例。,实例,谢谢大家!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 咨询培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号