# DesignPattern **Repository Path**: shumin1/design-pattern ## Basic Information - **Project Name**: DesignPattern - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-15 - **Last Updated**: 2021-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DesignPattern ## 介绍 程序设计的首要任务就是在识别和应对变化,以便变化来临时能够快速轻松应对。各种设计模式也是在贯彻这一思想,根据对象变化规律来设计模型,以求代码更好维护。23种设计模式归为创建型、结构型和行为型3个类型。 ## 使用说明 1. factory 工厂模式 2. single 单例模式 3. abstractfac 抽象工厂模式 4. builder 建造者模式 5. prototype 原型模式 6. proxy 代理模式 ## 分享 ### 1.创建型模式 创建型模式旨在将系统与它的对象创建、结合、表示的方式分离。这些设计模式在对象创建的类型、主体、方式、时间等方面提高了系统的灵活性。 以下情况中,可以考虑应用创建型模式: - 一个系统需要和它的对象和产品的创建相互独立。 - 一组相关的对象被设计为一起使用。 - 隐藏一个类库的具体实现,仅暴露它们的接口。 - 创建独立复杂对象的不同表示。 - 一个类希望它的子类实现它所创建的对象。 - 类的实例化在运行时才指定。 - 一个类只能有一个实例,而且这个实例能在任何时候访问到。 - 实例应该能在不修改的情况下具有可扩展性。 #### 工厂方法模式 允许一个类的实例化推迟到子类中进行。 场景:若干共性对象的创建逻辑复杂,或者存在变数 方案:创建对象的工厂类采用多态设计 案例:需要各种工程车来施工,每种工程车由对应的工厂制造 #### 抽象工厂模式 是一种为访问类提供一个创建一组相关或相互依赖对象的接口,其访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。 场景:若干关联对象的创建逻辑复杂,或者存在变数 方案:具体工厂根据抽象工厂创建各关联对象 案例:卖场需要各种品牌书桌及配套书柜,各品牌家具厂生产各自书桌和配套书柜 #### 原型模式 使用原型实例指定要创建的对象类型,通过复制原型创建新的对象。原型模式的克隆分为浅克隆和深克隆 场景:对象创建较消耗资源,而克隆(复制)对象的成本相对很低 方案:利用已有实例复制出其它实例 案例:书法展需要王羲之的书法作品,由《集王右军书圣教序》碑拓印 #### 构造者模式 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者。它使将一个复杂的对象分解为多个简单的对象,然后一步步构建而成。它将变与不变相分离,即产品的组成部分是不变得,但每一部分是可以灵活选择的 场景:希望通过定制创建多种同类对象 方案:通过相同模式定制不同对象 案例:电脑售卖店根据客户定制件安装主板,安装CPU,安装显卡等,最后完成攒机 #### 单例模式 保证一个类只有一个实例,并且提供对这个实例的全局访问方式。 场景:对象的数量在作用域内需要可控 方案:利用编程机制,控制类实例数量 案例:公司文件需要总经理来签字,公司里同时只能有一个总经理 #### ### 2.**结构型模式** 将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合组合对象。 由于组合关系或聚合关系比较继承关系耦合度低,满足“合成复合原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 #### 代理模式 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不合适或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的主要优点: - 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; - 代理模式可以扩展目标对象的功能; - 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度。 其主要缺点是: - 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢; - 增加了系统的复杂度。