创建型设计模式.

Slides:



Advertisements
Similar presentations
广州市教育局教学研究室英语科 Module 1 Unit 2 Reading STANDARD ENGLISH AND DIALECTS.
Advertisements

allow v. wrong adj. What’s wrong? midnight n. look through guess v. deal n. big deal work out 允许;准许 有毛病;错误的 哪儿不舒服? 午夜;子夜 快速查看;浏览 猜测;估计 协议;交易 重要的事.
高考英语阅读分析 —— 七选五. 题型解读: 试题模式: 给出一篇缺少 5 个句子的文章, 对应有七个选项,要求同学们根据文章结构、 内容,选出正确的句子,填入相应的空白处。 考查重点: 主要考查考生对文章的整体内容 和结构以及上下文逻辑意义的理解和掌握。 (考试说明) 选项特点: 主旨概括句(文章整体内容)
考研英语复试 口语准备 考研英语口语复试. 考研英语复试 口语准备 服装 谦虚、微笑、自信 态度积极 乐观沉稳.
英语中考复习探讨 如何写好书面表达 宁波滨海学校 李爱娣. 近三年中考试题分析 评分标准 试卷评分与练习 (2009 年书面表达为例 ) 影响给分的因素: 存在问题 书面表达高分技巧 建议.
第七课:电脑和网络. 生词 上网 vs. 网上 我上网看天气预报。 今天早上看了网上的天气预报。 正式 zhèngshì (报告,会议,纪录) 他被这所学校正式录取 大桥已经落成,日内就可以正式通车 落伍 luòw ǔ 迟到 chídào 他怕迟到,六点就起床了.
-CHINESE TIME (中文时间): Free Response idea: 你周末做了什么?
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
-Artificial Neural Network- Hopfield Neural Network(HNN) 朝陽科技大學 資訊管理系 李麗華 教授.
Object Oriented Analysis and Design
第9章 单例模式 Website:
59 中 张丽娟 学习目标: 1. 识记并理解运用 6 个单词和 5 个短语。 (source, accessible, network, access, via, create come up with, from the moment on, consist of, go down , at the.
Module 5 Shopping 第2课时.
Module 5.
Unit 2 What should I do?.
Thinking of Instrumentation Survivability Under Severe Accident
Chapter 7 Search.
Design Pattern (2) 设计模式(2) Institute of Computer Software 2018/9/21
潘爱民 软件设计模式(一) 潘爱民
Working with Databases (II) 靜宜大學資管系 楊子青
圖形溝通大師 Microsoft Visio 2003
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
Design Pattern (1) 设计模式(1) Institute of Computer Software 2018/11/23
第4章(2) 空间数据库 —关系数据库 北京建筑工程学院 王文宇.
软件建模训练(6-2) 设计模式 张静 南京理工大学计算机科学与工程学院.
职责链模式.
製程能力分析 何正斌 教授 國立屏東科技大學工業管理學系.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
Remember the five simple rules to be happy 快樂的五個簡單常規
第九單元 Classes and data abstraction I
增强型MR可解决 临床放射成像的 多供应商互操作性问题
Supernatural Love and Unity
Try to write He Mengling Daqu Middle School.
PubMed整合显示图书馆电子资源 医科院图书馆电子资源培训讲座.
Advanced Basic Key Terms Dependency Actor Generation association
基于课程标准的校本课程教学研究 乐清中学 赵海霞.
英语教学课件 九年级全.
Chapter 5 Recursion.
简单工厂模式.
Classes (2) Lecture 7.
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
Remember the five simple rules to be happy 快樂的五個簡單常規
Unit 8 Our Clothes Topic1 What a nice coat! Section D 赤峰市翁牛特旗梧桐花中学 赵亚平.
Guide to a successful PowerPoint design – simple is best
Speaker: Liu Yu-Jiun Date: 2009/4/29
虚 拟 仪 器 virtual instrument
Lesson 19: A Story or a Poem?
Simple Regression (簡單迴歸分析)
爬蟲類動物2 Random Slide Show Menu
徐迎晓 复旦大学软件学院 实现模型 徐迎晓 复旦大学软件学院.
讀 經 Scripture Reading 申命記/Deuteronomy 8:1-3.
高考应试作文写作训练 5. 正反观点对比.
Inheritance -II.
Remember the five simple rules to be happy 快樂的五個簡單常規
Remember the five simple rules to be happy 快樂的五個簡單常規
冀教版 九年级  Look into Science!.
计算机问题求解 – 论题1-5 - 数据与数据结构 2018年10月16日.
Remember the five simple rules to be happy 快樂的五個簡單常規
第7章 建造者模式 Deng Song
Create and Use the Authorization Objects in ABAP
名词从句(2).
 隐式欧拉法 /* implicit Euler method */
英语单项解题思路.
RecyclerView and CardView
5. Combinational Logic Analysis
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
無悔今生.
多维阅读第13级.
高考英语作文指导 福建省教研室 姚瑞兰.
When using opening and closing presentation slides, use the masterbrand logo at the correct size and in the right position. This slide meets both needs.
Presentation transcript:

创建型设计模式

目录 工厂方法模式 (factory method pattern) 单例模式(singleton pattern) 抽象工厂模式 (abstract factory pattern) 生成器模式 (builder pattern) 原型模式(prototype pattern)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 工厂方法模式 意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 适用性 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 OOP中,经常会遇到对象创建和初始化。主要是上述的两种情况 在第一种情况中,对象比较复杂,包含很多的初始化代码,因此应该将这些代码放到一个Factory类中,充当类工厂,以减少重复的对象创建代码。典型的例子是数据库的链接创建(演示示例图) 。 第二种情况也较为常见,OOP中的一个重要概念就是类的继承。派生于同一个基类的对象往往都是具备相似的功能,仅仅是具体的实现根据不同环境而异,因此创建这些对象的时候就需要根据不同的情况(或者输入参数)而异。将这些代码移入专门的Factory类同样对减低代码重复有非常明显的作用。典型例子是XMLDB的DAO对象创建(演示示例图)

工厂方法模式实例: 采用new的if-else设计

工厂方法模式实例(2): 工厂方法模式

工厂方法模式实例(3): 客户端代码

Singleton: a class that has only one instance 单例模式 Singleton: a class that has only one instance

Singleton pattern singleton: an object that is the only object of its type ensures that a class has at most one instance provides a global access point to that instance takes responsibility of managing that instance away from the programmer (illegal to construct more instances) provide accessor method that allows users to see the (one and only) instance possibly the most known / popular design pattern! (this should tell you something)

Restricting objects, continued One way to avoid creating objects: use static methods instead Math, System, JOptionPane is this a good alternative choice? Why or why not? Problem: lacks flexibility Example: static methods can't be passed as an argument to a method, nor returned Problem: cannot be extended Example: static methods can't be subclassed and overridden like a singleton's could be

Implementing Singleton make constructor(s) private so that they can not be called from outside declare a single static private instance of the class write a public getInstance() or similar method that allows access to the single instance possibly protect / synchronize this method to ensure that it will work in a multi-threaded program

Singleton sequence diagram

Singleton example consider a singleton class RandomGenerator that generates random numbers public class RandomGenerator { private static RandomGenerator gen = new RandomGenerator(); public static RandomGenerator getInstance() { return gen; } private RandomGenerator() {} ... possible problem: always creates the instance, even if it isn't used

Singleton example 2 variation: don't create the instance until needed // Generates random numbers. public class RandomGenerator { private static RandomGenerator gen = null; public static RandomGenerator getInstance() { if (gen == null) { gen = new RandomGenerator(); } return gen; ... What could go wrong with this version?

Singleton example 3 variation: solve concurrency issue by locking // Generates random numbers. public class RandomGenerator { private static RandomGenerator gen = null; public static synchronized RandomGenerator getInstance() { if (gen == null) { gen = new RandomGenerator(); } return gen; ... Is anything wrong with this version?

Singleton example 4 variation: solve concurrency issue without unnecessary locking // Generates random numbers. public class RandomGenerator { private static RandomGenerator gen = null; public static RandomGenerator getInstance() { if (gen == null) { synchronized (RandomGenerator.class) { // must test again -- can you see why? // sometimes called test-and-test-and-set (TTS) gen = new RandomGenerator(); } return gen;

抽象工厂(Abstract Factory) Purpose Provide an interface for creating families of related or dependent objects without specifying their concrete class Applicability The factory determines the actual concrete type of object to be created, and it is here that the object is actually created (in C++, for instance, by the new operator). However, the factory only returns an abstract pointer to the created concrete object. 虚线代表创建,因为客户端只和AbstractFactory,AbstractProductA, AbstractProductB相识,因此当有新产品加入时,只需加入这些具体的产品以及相应的具体工厂实现即可,客户端代码不需要修改。

抽象工厂示例 创建支持多视感风格标准的用户界面工具包: 支持多种视感标准; 不同标准之间具有可移植性;

生成器模式(Builder) Intent To separate the construction of a complex object from its representation, so that the same construction process can create different representations. Applicability The construction processes are independent from the representations of the concrete objects Construction allows the difference representations of concrete objects 复杂对象有多个子对象,但是子对象的构建过程是一样的,只是每个子对象的表示不同,这样每个子对象的具体表示封装在具体生成器中,Director可以调用抽象类的构建过程接口。当有新类型的子对象时,只需要动态得创建相应的生成器并把该生成器引用传给Director,而无需改变Director的代码。

Using prototype to construct objects, and copy these prototypes Intent Using prototype to construct objects, and copy these prototypes Applicability avoid subclasses of an object creator in the client application, like the abstract factory pattern does. avoid the inherent cost of creating a new object in the standard way (e.g., using the 'new' keyword) when it is prohibitively expensive for a given application. 最大的优点是允许只通过客户注册原型实例就可以讲一个新的具体产品类并入系统。比其他创建型模式更为灵活。

Q1: Summarize the differences among the five creational design patterns? Difference between copy constructor and prototype pattern?