精华内容
下载资源
问答
  • 对象模式

    千次阅读 2019-09-25 20:29:32
    在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式...

    介绍

    在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。

    在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

    实现

    我们将创建一个定义操作(在这里,是客户的名称)的 AbstractCustomer 抽象类,和扩展了 AbstractCustomer 类的实体类。工厂类 CustomerFactory 基于客户传递的名字来返回 RealCustomerNullCustomer 对象。

    NullPatternDemo,我们的演示类使用 CustomerFactory 来演示空对象模式的用法。

    空对象模式

    步骤 1

    创建一个抽象类。

    AbstractCustomer.java

    public abstract class AbstractCustomer {
    
        protected String name;
    
        public abstract boolean isNil();
    
        public abstract String getName();
    
    }
    

    步骤 2

    创建扩展了上述类的实体类。

    RealCustomer.java

    public class RealCustomer extends AbstractCustomer {
    
        public RealCustomer(String name) {
            this.name = name;
        }
    
        @Override
        public boolean isNil() {
            return false;
        }
    
        @Override
        public String getName() {
            return name;
        }
    
    }
    

    NullCustomer.java

    public class NullCustomer extends AbstractCustomer {
    
        @Override
        public String getName() {
            return "Not Available in Customer Database";
        }
    
        @Override
        public boolean isNil() {
            return true;
        }
    
    }
    

    步骤 3

    创建 CustomerFactory 类。

    CustomerFactory.java

    public class CustomerFactory {
    
        public static final String[] names = {"Rob", "Joe", "Julie"};
    
        public static AbstractCustomer getCustomer(String name) {
            for (int i = 0; i < names.length; i++) {
                if (names[i].equalsIgnoreCase(name)) {
                    return new RealCustomer(name);
                }
            }
            return new NullCustomer();
        }
    
    }
    

    步骤 4

    使用 CustomerFactory,基于客户传递的名字,来获取 RealCustomerNullCustomer 对象。

    NullPatternDemo.java

    public class NullPatternDemo {
    
        public static void main(String[] args) {
            AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob");
            AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob");
            AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie");
            AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura");
    
            System.out.println("Customers");
            System.out.println(customer1.getName());
            System.out.println(customer2.getName());
            System.out.println(customer3.getName());
            System.out.println(customer4.getName());
        }
    
    }
    

    步骤 5

    验证输出。

    Customers
    Rob
    Not Available in Customer Database
    Julie
    Not Available in Customer Database
    
    展开全文
  • 传输对象模式

    千次阅读 2019-09-25 19:58:52
    传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过...

    介绍

    传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过网络传输。它没有任何的行为。服务器端的业务类通常从数据库读取数据,然后填充 POJO,并把它发送到客户端或按值传递它。对于客户端,传输对象是只读的。客户端可以创建自己的传输对象,并把它传递给服务器,以便一次性更新数据库中的数值。以下是这种设计模式的实体。

    • 业务对象(Business Object) - 为传输对象填充数据的业务服务。
    • 传输对象(Transfer Object) - 简单的 POJO,只有设置/获取属性的方法。
    • 客户端(Client) - 客户端可以发送请求或者发送传输对象到业务对象。

    实现

    我们将创建一个作为业务对象的 StudentBO 和作为传输对象的 StudentVO,它们都代表了我们的实体。

    TransferObjectPatternDemo,我们的演示类在这里是作为一个客户端,将使用 StudentBOStudent 来演示传输对象设计模式。

    传输对象模式

    步骤 1

    创建传输对象。
    StudentVO.java

    public class StudentVO {
    
        private String name;
        private int rollNo;
    
        StudentVO(String name, int rollNo){
            this.name = name;
            this.rollNo = rollNo;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getRollNo() {
            return rollNo;
        }
    
        public void setRollNo(int rollNo) {
            this.rollNo = rollNo;
        }
    
    }
    

    步骤 2

    创建业务对象。
    StudentBO.java

    public class StudentBO {
    
        //列表是当作一个数据库
        List<StudentVO> students;
    
        public StudentBO() {
            students = new ArrayList<StudentVO>();
            StudentVO student1 = new StudentVO("Robert", 0);
            StudentVO student2 = new StudentVO("John", 1);
            students.add(student1);
            students.add(student2);
        }
    
        public void deleteStudent(StudentVO student) {
            students.remove(student.getRollNo());
            System.out.println("Student: Roll No "
                    + student.getRollNo() + ", deleted from database");
        }
    
        //从数据库中检索学生名单
        public List<StudentVO> getAllStudents() {
            return students;
        }
    
        public StudentVO getStudent(int rollNo) {
            return students.get(rollNo);
        }
    
        public void updateStudent(StudentVO student) {
            students.get(student.getRollNo()).setName(student.getName());
            System.out.println("Student: Roll No "
                    + student.getRollNo() + ", updated in the database");
        }
    
    }
    

    步骤 3

    使用 StudentBO 来演示传输对象设计模式。
    TransferObjectPatternDemo.java

    public static void main(String[] args) {
          StudentBO studentBusinessObject = new StudentBO();
     
          //输出所有的学生
          for (StudentVO student : studentBusinessObject.getAllStudents()) {
             System.out.println("Student: [RollNo : "
             +student.getRollNo()+", Name : "+student.getName()+" ]");
          }
     
          //更新学生
          StudentVO student =studentBusinessObject.getAllStudents().get(0);
          student.setName("Michael");
          studentBusinessObject.updateStudent(student);
     
          //获取学生
          studentBusinessObject.getStudent(0);
          System.out.println("Student: [RollNo : "
          +student.getRollNo()+", Name : "+student.getName()+" ]");
       }
    

    步骤 4

    执行程序,输出结果:

    Student: [RollNo : 0, Name : Robert ]
    Student: [RollNo : 1, Name : John ]
    Student: Roll No 0, updated in the database
    Student: [RollNo : 0, Name : Michael ]
    
    展开全文
  • 数据访问对象模式

    千次阅读 2019-09-25 20:03:19
    数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。 数据访问对象接口(Data Access Object Interface) -...

    介绍

    数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。

    • 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。
    • 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
    • 模型对象/数值对象(Model Object/Value Object) - 该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。

    实现

    我们将创建一个作为模型对象或数值对象的 Student 对象。StudentDao 是数据访问对象接口。StudentDaoImpl 是实现了数据访问对象接口的实体类。DaoPatternDemo,我们的演示类使用 StudentDao 来演示数据访问对象模式的用法。

    数据访问对象模式

    步骤 1

    创建数值对象。

    Student.java

    public class Student {
    
        private String name;
        private int rollNo;
    
        Student(String name, int rollNo){
            this.name = name;
            this.rollNo = rollNo;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getRollNo() {
            return rollNo;
        }
    
        public void setRollNo(int rollNo) {
            this.rollNo = rollNo;
        }
    
    }
    

    步骤 2

    创建数据访问对象接口。

    StudentDao.java

    public interface StudentDao {
    
        List<Student> getAllStudents();
    
        Student getStudent(int rollNo);
    
        void updateStudent(Student student);
    
        void deleteStudent(Student student);
    
    }
    

    步骤 3

    创建实现了上述接口的实体类。

    StudentDaoImpl.java

    public class StudentDaoImpl implements StudentDao {
    
        //列表是当作一个数据库
        List<Student> students;
    
        public StudentDaoImpl() {
            students = new ArrayList<Student>();
            Student student1 = new Student("Robert", 0);
            Student student2 = new Student("John", 1);
            students.add(student1);
            students.add(student2);
        }
    
        @Override
        public void deleteStudent(Student student) {
            students.remove(student.getRollNo());
            System.out.println("Student: Roll No " + student.getRollNo()
                    + ", deleted from database");
        }
    
        //从数据库中检索学生名单
        @Override
        public List<Student> getAllStudents() {
            return students;
        }
    
        @Override
        public Student getStudent(int rollNo) {
            return students.get(rollNo);
        }
    
        @Override
        public void updateStudent(Student student) {
            students.get(student.getRollNo()).setName(student.getName());
            System.out.println("Student: Roll No " + student.getRollNo()
                    + ", updated in the database");
        }
    
    }
    

    步骤 4

    使用 StudentDao 来演示数据访问对象模式的用法。

    CompositeEntityPatternDemo.java

    public class DataAccessObjectPatternDemo {
    
        public static void main(String[] args) {
            StudentDao studentDao = new StudentDaoImpl();
    
            //输出所有的学生
            for (Student student : studentDao.getAllStudents()) {
                System.out.println("Student: [RollNo : "
                        + student.getRollNo() + ", Name : " + student.getName() + " ]");
            }
            System.out.println();
    
            //更新学生
            Student student = studentDao.getAllStudents().get(0);
            student.setName("Michael");
            studentDao.updateStudent(student);
            System.out.println();
    
            //获取学生
            studentDao.getStudent(0);
            System.out.println("Student: [RollNo : "
                    + student.getRollNo() + ", Name : " + student.getName() + " ]");
        }
    
    }
    

    步骤 5

    验证输出。

    Student: [RollNo : 0, Name : Robert ]
    Student: [RollNo : 1, Name : John ]
    Student: Roll No 0, updated in the database
    Student: [RollNo : 0, Name : Michael ]
    
    展开全文
  • PHP面向对象设计模式

    万人学习 2015-04-10 21:42:44
    本系列教程内容涵盖PHP常用的设计模式,旨在指导读者搭建易扩展的项目框架,高服用的代码,大程度的发挥面向对象思想的优势。
  • Oracle 模式对象

    千次阅读 2015-11-12 11:23:16
    模式对象的关系 模式:是数据库中全体数据的逻辑结构和特征的描述。它仅仅涉及到型的描述不涉及到具体的值 在Oracle中所谓模式就是指一系列逻辑数据结构或者对象的集合。 在Oracle数据库中数据对象都是...
    模式与对象的关系


    模式:是数据库中全体数据的逻辑结构和特征的描述。它仅仅涉及到型的描述不涉及到具体的值

    在Oracle中所谓模式就是指一系列逻辑数据结构或者对象的集合。

    在Oracle数据库中数据对象都是模式为单位进行组织和管理的。

    模式与用户相对应一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。

    通常情况下,用户所创建的数据库对象都保存在与自己同名的模式中。

    同一模式中的数据库对象的名称必须唯一而不同模式中的数据库对象可以同名。

    例如:

    数据库用户名Uop_CEN1和uop_crm1都在数据库中创建了一个名为test的表
    因为用户Uop_CEN1和uop_crm1分别对应模式Uop_CEN1和uop_crm1
    所以uop_cen1用户创建的test表放在uop_cen1模式中,而uop_crm1用户创建的test表放在uop_crm1模式中
    在默认情况下用户引用的对象是同名模式中的对象,
    如果要引用其他模式中的对象,需要在该对象名之前指明对象所属模式。
    例如:
    如果用户uop_cen1要引用uop_crm1模式中test表则必须使用uop_crm1.test的形式来表示;
    如果用户uop_cen1要引用uop_cen1模式中的test表则可以使用uop_cen1.test的形式来表示;或者直接引用test都可以

    并不是Oracle数据库中的所有对象都是模式对象,表,索引,索引表,分区表,视图,实体化视图,序列,同义词,数据库链接,pl/sql包,存储过程,函数,Java类与其他Java资源等属于特定的模式称为模式对象。
    上下文(Contexts) 目录(Directory) 概要文件(Profile) 角色(Role) 表空间(Tablespaces) 用户(User)的数据库对象
    不属于任何模式叫做非模式对象

    模式对象是数据的逻辑存储结构。数据对象和磁盘上保存其信息的物理文件并不一一对应。
    Oracle在数据库的一个表空间上保存模式对象。每个对象的数据物理的保存在表空间的一个或者多个数据文件上。
    对某些对象如表、索引、聚集来说,你可以指定在表空间的数据文件上Oracle可以分配多大的磁盘空间来存储这个对象。

    模式和表空间没有什么联系:一个表空间可以包换来自不同模式的对象,模式对象可以包含在不同的表空间上。

    模式与用户的关系
    在Oracle数据库中,虽然模式与数据库用户相互关联,但是其概念和作用完全不同。
    模式作为数据库对象的容器而存在,用于数据库对象的管理。
    而用户主要用于数据库登陆以及权限管理
    在Oracle数据中创建一个用户时,系统会自动在数据库中创建一个与用户同名的模式

    转载地址:http://blog.chinaunix.net/uid-26430381-id-4491214.html
    展开全文
  • js对象单例模式(未完待完善)

    万次阅读 2020-12-04 14:13:34
    1.ES5传统对象模式 var Single = (function() { var instance = null; function Single(name) { this.name = name; } return function(name){ if (!instance) { instance = new Single(name); } return ...
  • Java面向对象设计模式

    千次阅读 2017-05-02 14:17:36
     ——可复用面向对象软件的基础  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 ...
  • 介绍 在前面文章中提到的策略模式提到过,需要客户自行选择类并创建实例,那么这个选择的过程放在哪里呢,如果在每一个需要此对象的地方都new一个,那必然会有代码重复,而且如果修改也会很麻烦,这样不符合面向...
  • 对象结构型模式

    万次阅读 2019-11-27 21:55:46
    对象结构型模式 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构 适配器模式 在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这个包装类指的就是适配器(Adapter),它所...
  • Golang空对象模式(二十一)

    千次阅读 2019-06-07 15:48:41
    github:https://github.com/zhumengyifang/GolangDesignPatterns ... 空对象模式 在空对象模式中,一个空对象取代nil对象实例的检查,nil对象不是检查空值,而是反应一个不做任何动作的关系。这样的nil对象也...
  • 在面向对象的入门课程C++(或者JAVA)中,封装数据和方法好像是面向对象最重要的一个特点,当然还有基于继承实现的多态和重载。其实每一种OOP语言,由于彼此功能上的差异性,这些特点只能适用于某一种特定的...
  • 面向对象-设计模式分类

    千次阅读 2020-12-27 16:38:49
    设计模式的分类 创建型模式 工厂方法模式、抽象工厂模式、单例模式、...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 ...
  • 代理模式也称委托模式,是结构型设计模式之一,在实际应用中使用非常广泛,因此我们必须掌握这个设计模式。定义:为一个对象提供一个代理对象,通过这个代理对象控制这个对象的行为。使用场景: 直接访问或者控制...
  • 深入理解工厂模式——由对象工厂生成对象

    万次阅读 多人点赞 2018-05-27 20:12:45
    一 工厂模式介绍 1.1 工厂模式的定义 1.2 工厂模式的分类: 1.3 在开源框架中的使用 1.4 为什么要用工厂模式 二 简单工厂模式 2.1 介绍 2.2 适用场景 2.3 简单工厂模式角色分配: 2.4 简单工厂实例 2.5 使用反射...
  • 面向对象设计模式

    千次阅读 2012-11-14 19:24:18
    n 面向对象软件开发领域中,设计模式包括一些规则来完成一定任务。设计模式针对一些特定的问题,提出一种解决方案。 n 常用的面向对象设计模式有4种: n Factory模式、Singleton模式、Facade模式和MVC架构模式...
  • 数据访问对象模式 数据访问对象模式描述了如何创建透明访问数据源的对象。 场景设计 设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法在实际使用的过程中,继承BaseDao,就可以...
  • 组合模式的定义:又叫作整体-部分(Part-Whole)...属于结构型设计模式。 组合模式一般用来描述整体与部分的关系,它将对象组合到树状结构,顶层的节点被称为根节点,最末级的节点成为叶节点,中间的节点成为树枝节点。
  • 它主要用于动态地对一个类或者对象添加新的功能,使得原有的类得到扩展,与代理模式不同的是该模式是直接对一个原有的对象进行扩展功能,而代理模式代理原对象的行为,而不是对原来的对象进行扩展。同时也不同于...
  • 前言 面向对象语言具有封装,继承,多态等三个特性,同时,面向对象语言通常有好多种设计模式,这些设计模式在面向对象语言中是相通的,java是一种面向对象的语言,使用java语言作为开发语言的Android的源码中大量...
  • 这次要介绍一下对象模式(Object Pool Pattern),这个模式为常见 23 种设计模式之外的设计模式,介绍的初衷主要是在平时的 android 开发中经常会看到,比如 ThreadPool 和 MessagePool 等。  在 java 中,所有...
  • 前言 面向对象中的另外一个设计模式是原型(prototype)模式,这种模式使用非常简单,使用的场合不是很多,所以不是很常用。定义:将一个对象实例设为原型,通过clone该原型实例得到新的一个实例,而不是通过new...
  • ① 类适配器 : 适配器类 实现客户端接口, 继承现有类 ② 对象适配器 : 适配器类继承客户端类, 维护一个现有类对象作为成员变量; . .
  • ECMA-262把对象定义为:”无需属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说明对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样...
  • 策略模式又是一种面向对象的设计模式,说白了,所有的这些模式的出现都是为了使程序或者代码结构更加清晰,易于理解,降低耦合性,提高灵活性以使代码更加容易扩展等等。定义:策略模式定义了一系列算法,并将每个...
  • ① 接口型模式四种使用场景 适配器模式 外观模式 合成模式 桥接模式 ② 接口与抽象类区别 继承个数 抽象方法 字段定义 方法描述 构造器; ③ 桩的使用, 使实现类能间接实现自己感兴趣的方法;
  • 优雅地创建复杂对象 —— Builder 模式

    万次阅读 多人点赞 2017-10-20 18:52:50
    当我们需要创建一个复杂的对象时,使用静态工厂或者构造器...本文列举了三种解决办法:重叠构造器模式、JavaBeans模式和Builder模式,并通过具体实例对上述三种方法进行铺垫和对比,从而真正帮助读者理解Builder模式
  • Lombok Builder模式创建对象

    千次阅读 2021-03-29 14:14:22
    Lombok Builder模式创建对象 1、传统创建对象 ResponseResultVO vo = new ResponseResultVO(); vo.setCode(1); vo.setData(""); vo.setMsg(""); 2、Builder模式 1、@Builder注解 @Data @Builder public class ...
  • 相关概念:定义:工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的...
  • 设计模式对象模式(Object Pool)

    千次阅读 2016-05-19 10:21:09
    http://blog.csdn.net/wcyoot/article/details/7584574 ... 对象模式 今天忽然看到一个有趣的设计模式,就上网看了下,现做一个整理。   前期了解:Object Pool,即对象池,对象被预先创建并初始化
  • 设计模式--对象行为模式比较

    千次阅读 2012-09-05 14:13:12
    1、职责链模式(Chain of Responsibility):  使多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。  职责链...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,037,987
精华内容 815,194
关键字:

哪个对象属于模式对象