zoukankan      html  css  js  c++  java
  • 设计模式(一)

    需要UML

    设计模式分三类,分别是 创建型结构型行为型

    (一)设计原则

    记忆方法solid

    1. 单一职责原则

    一个类只有一个职责。

    2. 开闭原则

    一个软件对扩展开放,对修改关闭。

    3. 里氏替换原则

    子类能完全替换父类【凡是能用父类的地方,都可以使用子类--要求父类方法的简洁,不能为了某一个子类的实现而强行扩展父类】

    4. 接口隔离原则

    一个类对另外一个类的依赖,建立在最小的接口之上。

    5. 依赖倒置原则DIP

    高层模块不依赖底层模块,两者都依赖其抽象【依赖抽象而非依赖具体,依赖接口而非依赖实现】

    6. 迪米特法则

    一个软件,尽可能少的和其它实体发生相互作用。

    (二)创建型

    创建型模式 是创建对象的模式,抽象了实例化的过程。

    创建型模式分为5种,分别是 单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。记忆口诀:抽工单建原

    1. 单例模式

    定义:单例模式;一个类只有一个实例,而且自行实例化冰箱整个系统提供这个实例。

    实现:单例的特征:

    (1) 构造方法私有 private(确保外部不能通过沟通方法重新创新新的实例)

         Private class Singleton(){}

    (2) 静态的类对象私有private static Singleton =

    ?分别代表两种可能。Nullnew Singleton(). 可以分为懒汉模式饥汉模式

    懒汉模式private static Singleton = null 类加载的时候,并不实例化自己。

    饥汉模式private static Singleton = new Singleton() 类加载的时候,已经实例化自己。

    (3) 对外提供公用的创建接口(保证所有实例化都调用一个方法。方法保证只被实例化一次) public static Singleton getInstance() = {}

    懒汉模式:需要在第一次调用的时候初始化。线程不安全,需要添加方法同步

    Synchronized Public static Singleton getInstance () = {

    If(instance == null){

    Instance = new Singleton();

    }

    Return instance;

    }

    饥汉模式线程安全。类加载的时候,已经进行了初始化。所以可以直接返回。

    Public static Singleton getInstance () = {

    Return instance;

    }

    2. 工厂方法模式

    定义:一个创建产品的工厂结构。将实际创建工作推迟到子类中实现。

    优点:将产品的生产聚集到一个特定的地方,方便代码的维护。具体业务中只依赖抽象产品。真是执行流程中加载的是那个产品对象是有运行时参数决定。实现可插拔。本质是依赖抽象而为具体实现。

    工厂方法模式涉及4个角色。分别是 抽象工厂、具体工厂、抽象产品和具体产品。

    (1) 抽象产品:定义我们需要的产品的共性,实现对产品的抽象定义。

    一般是接口。

    Public interface Product(){

    // 接口的公用方法

    Public void method1();

    Public void method2();

    }

    (2) 具体产品:实现抽线接口,我们需要的具体产品。

    Public class Concrete_Product() implements Product(){

    Public void method1(){

    // 具体实现

    }

    Public void method2(){

    // 具体实现

    }

    }

    (3) 抽象工厂:定义生产产品的抽象。返回的结果必须是 抽象产品。在具体工厂中 生产出的是具体的产品(抽象产品的实现Impl)

    核心是 定义参数,返回值必须是抽象产品。其中参数有多种,可以是枚举类型(或者字符串)匹配转发 或者是 类通过反射生成。

    (4) 具体工厂:实现抽象工厂。核心是根据参数,确定工厂返回(不同的)具体产品

    根据抽象工厂的定义,实现具体的逻辑代码。

    3. 抽象工厂模式

    抽象工厂模式和工厂方法模式很类似。组成角色也都一样。需要了解清楚两者之间的区别和使用场景即可。

    定义:为创建一组相互依赖的对象 提供的接口。

    在工厂方法模式中,我们假设需要一种产品。而如果需要多种产品时,且产品之间是相互依赖的。这个时候如果使用工厂方法模式。需要创建多个产品工厂,且没法表达之间的依赖。这种场景下,适合使用抽象工厂。

    (1) 抽象产品

    Public interface Product_A(){

    // 具体方法定义

    Public void method1()

    // 具体方法定义

    Public void method2()

    }

    Public interface Product_B(){

    // 具体方法定义

    Public void method1()

    // 具体方法定义

    Public void method2()

    }

    (2) 具体产品

    省略

    (3) 抽象工厂

    // 产品AB有依赖关系,是一族产品

    Public class concrete_Factory(){

    // 生产A产品

    Public Product_A factory_A()

    // 生产B产品

    Public Product_A factory_B()

    }

    (4) 具体工厂

    省略

    应用:调用的时候,先创建具体的工厂。然后使用具体的工厂调用里面创建product_A Product_B

    4. 建造者模式

    定义:将 部件的生产 产品对象的组装 分离出来。生产产品的时候,包含两部分,一部分是部件的生产,一部分是对象的组装。也是 对象的构建和表示分离。

    优点:客户端在不知道具体创建细节的情况下,可以创建产品。(用户只需要知道产品需要哪些部件和顺序,可以在导演角色中创建产品,而不需要知道各个部件的生产细节)

    建造者分为三个角色。产品角色抽象建造者、具体建造者导演者角色

    (1) 产品角色

      // Product  忽略

    (2) 抽象建造者

    Public abstract class Builder {

    // 部件定义

    Private part1 ...

    Private part2 ...

    Private part3 ...

    // 部件生产方法

    Public void setPart1();

    Public void setPart2();

    Public void setPart3();

    // 部件组装方法(创建产品)

    Public abstract Product builder_Product();

    // 在具体建造者中 对产品部件的组装。

    Part1+part2+part3 返回 product

    }

    (3) 具体建造者

    (4) 导演者

    安排已有部件的顺序。然后让具体建造者建造产品。一般而言,导演角色中有多个产品的具体构造者。

    5. 原型模式

    定义:原型模式的核心是通过clone的方式实例化产品。

    原型模式分为3个角色。抽象原型具体原型客户。比较简单。用一句话描述:在抽象原型继承cloneable 接口,具体原型中实现clone方法。最后在客户角色中通过 .clone 方法创建新的对象。

    (1) 抽象原型

    定义原型类的接口,继承cloneAble接口

    Public interface protoType extends CloneAble{

    // 克隆方法

    ProroType clone ();

    }

    (2) 具体原型

    具体功能外,实现接口中定义的克隆方法clone。调用super.clone() ,实现原型的克隆。

    (3) 客户

    通过protoType对象。调用clone方法产生新的对象。

  • 相关阅读:
    错误:IIS Admin Service 服务因 2147549465 (0x80010119) 服务性错误而停止(转)
    学习:Using STSADM o migrateuser on a recreated account(转)
    记录:MOSS里中英文权限对照表
    错误:用stsdev创建的解决方案:Makecab.exe — error MSB3073
    记录:MOSS:EventHandler部署和使用
    学习:C#中的String、string(转)
    学习:SQL数据库日志收缩(转)
    学习:SharePoint 使用 SPQuery.Folder 查询文件夹中的数据(转)
    学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)
    学习:[SharePoint]HTTP 500 Internal Server Error (转)
  • 原文地址:https://www.cnblogs.com/maopneo/p/13864585.html
Copyright © 2011-2022 走看看