原型模式

基于C的文件操作

喜夏-厌秋 提交于 2020-01-29 03:02:30
在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdio.h中定义如下: 1 typedef struct { 2 int level; /* fill/empty level of buffer */ 3 unsigned flags; /* File status flags */ 4 char fd; /* File descriptor */ 5 unsigned char hold; /* Ungetc char if no buffer */ 6 int bsize; /* Buffer size */ 7 unsigned char _FAR *buffer; /* Data transfer buffer */ 8 unsigned char _FAR *curp; /* Current active pointer */ 9 unsigned istemp; /* Temporary file indicator */ 10 short token; /* Used for validity checking */ 11 } FILE; /* This is the FILE object */ FILE这个结构包含了文件操作的基本属性

创建型模式的特点和分类

孤人 提交于 2020-01-28 19:03:26
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产。 创建型模式分为以下几种。 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。 工厂方法(FactoryMethod)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。 抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。 以上 5 种创建型模式,除了 工厂方法模式 属于类创建型模式,其他的全部属于对象创建型模式,我们将在之后的教程中详细地介绍它们的特点、结构与应用。 来源: https://www.cnblogs.com/sallyiszxm/p/10979656.html

原型模式 详解

ぃ、小莉子 提交于 2020-01-28 04:22:32
定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象; 创建型模式 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值; 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值; 角色 抽象原型类(Prototype) :抽象原型类,声明克隆自身的接口; 具体原型类(ConcretePrototype) :具体原型类,实现克隆的具体操作; 客户端(Client) :让一个克隆自身,从而获得新的对象; 从网上找到的例图 适用场景 当一个系统应该独立于它的产品创建,构成和表示时,要使用Prototype模式; 当要实例化的类是在运行时刻指定时,比如动态加载; 为了避免创建一个与产品类层次平行的工厂类层次; 当一个类的实例只有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些; 例子 实现代码 /** * Created by George on 16/7/20. */ /** * 第一种创建对象方式 * @type {{name: string, drive: Function, panic: Function}} */ var myCar = { name : "Mini QQ", drive : function () {

函数的四种调用方式

流过昼夜 提交于 2020-01-27 22:48:51
函数的四种调用方式 函数有下列调用模式 函数调用模式 方法调用模式 构造器模式 上下文模式 1. 函数调用 模式 要调用,就肯定要先定义,函数的定义方式: 声明式: function fuc() {} 表达式式: var func = function() {}; Function: new Function( ‘参数’,…,’函数体’ ); 单独独立调用的,就是函数调用模式,即 函数名( 参数 ),不能加任何其他的东西, 对象 o.fuc() 就不是了。 在函数调用模式中, this 表示全局对象 window 任何自调用函数都是函数模式。 2. 方法调用 模式 method 所谓方法调用,就是用对象的方法调用。方法是什么,方法本身就是函数,但是,方法不是单独独立的,而是要通过一个对象引导来调用。 就是说方法对象一定要有宿主对象。 即 对象.方法(参数) this表示引导方法的对象,就是指宿主对象 对比-函数调用模式: 方法调用模式是不是独立的,需要宿主,而函数调用模式是独立的 方法调用模式方式:obj.fuc(); 函数调用模式方式: fuc(); 方法调用模式中,this指宿主。而函数调用模式中 this 指 全局对象window 美团的一道面试题 var length = 10; function fn ( ) { console.log( this.length ); /

JavaScript创建对象的方式

狂风中的少年 提交于 2020-01-27 20:41:15
一、工厂模式    工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程。     考虑到在 ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节。 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 27, "Doctor"); console.log(person1); console.log(person2);   运行结果如下图所示:   函数 createPerson()能够根据接受的参数来构建一个包含所有必要信息的 Person 对象。   可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。   工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。 二、构造函数模式  

原型模式

醉酒当歌 提交于 2020-01-27 19:01:53
找工作难呐   大家好,我原本是神剑山庄的铸剑师,名叫小赵,本来干的好好的,后来一时兴起,睡了三少爷的小姨子,与其一直提心吊胆,干脆来个逃之夭夭。   但是,我也要吃饭的呀,工作也得找,神剑山庄去不得,还有断剑山庄、藏剑山庄、荡剑山庄、等等等等大型企业,说不定这次跳槽,能跳出个飞黄腾达!   为了提高我投简历的准确性,我觉得简历要写的多样化,不能全写一模一样,比如说我的期望薪资不能写成一样,因为我希望能够根据目标企业的情况来投递合适薪资的简历,这样中标概率大一点。   这是我的简历类: public class Resume { private String name; private String position; private int salary; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public int getSalary() { return salary; } public

设计模式之创建型模式

心已入冬 提交于 2020-01-25 01:28:23
1.单例模式 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 实现:一个类的对象的产生是由类构造函数来完成的,如果想限制对象的产生,一个办法就是将构造函数变为私有的(至少是受保护的),使得外面的类不能通过引用来产生对象;同时为了保证类的可用性,就必须提供一个自己的对象以及访问这个对象的静态方法 放一个类图直观描述 实现方式: 饿汉式 懒汉式 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式) 定义:主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的 a.简单工厂模式 定义:简单工厂模式又称静态工厂方法模式,是工厂方法模式的一种特例,两者归为一类。它存在的目的很简单:定义一个用于创建对象的接口 模式组成部分: 工厂类角色:用于商业逻辑和判断逻辑,由一个具体类实现 抽象产品角色:一般是具体产品继承的父类或者实现的接口,由接口或者抽象类实现 具体产品角色:工厂类所创建的对象就是此角色的实例,由一个具体类实现 模式实例 工厂方法模式 定义:去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担 实现:使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”,分担了对象承受的压力,使得结构变得灵活起来 模式组成部分: 1.抽象工厂角色:

JAVA设计模式(系列) 原型模式

一笑奈何 提交于 2020-01-23 16:16:36
浅拷贝/深拷贝 序列化机制实现深拷贝 模式定义:原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的的对象实例; public class ProtoType { public static void main ( String [ ] args ) throws CloneNotSupportedException { Product product = new Product ( "name" , new String [ ] { "1" , "wq" } , new ProductBaseInfo ( "213" ) ) ; Product clone = product . clone ( ) ; System . out . println ( product ) ; System . out . println ( clone ) ; System . out . println ( product == clone ) ; System . out . println ( ) ; //验证浅拷贝 //重写 clone方法;使得里面的ProductBaseInfo也拷贝;否则对象引用的还是原来的 product . getProductBaseInfo ( ) . setInfo ( "789" ) ; System . out . println (

c++设计模式-原型模式

廉价感情. 提交于 2020-01-23 15:53:16
动机 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变? 模式定义 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建信的对象。 ——《设计模式》GoF 结构 示例 //抽象类 class ISplitter{ public: virtual void split()=0; virtual ISplitter* clone()=0; //通过克隆自己来创建对象 virtual ~ISplitter(){} }; //具体类 class BinarySplitter : public ISplitter{ public: virtual ISplitter* clone(){ return new BinarySplitter(*this);//调用自身的拷贝构造函数 } }; class TxtSplitter: public ISplitter{ public: virtual ISplitter* clone(){ return new TxtSplitter(*this); } }; class PictureSplitter:

原型模式

萝らか妹 提交于 2020-01-22 05:54:34
个人博客 http://www.milovetingting.cn 原型模式 模式介绍 原型模式是一个创建型的模式。多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例,可使程序运行更高效。 模式定义 用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。 使用场景 类初始化需要消耗非常多的资源 通过new产生一个对象需要非常繁琐的数据准备或访问权限 一个对象需要提供给其它对象访问,而且各个调用者可能都需要修改值 通过实现Cloneable接口的原型模式在调用clone函数构造实例时,并不一定比通过new操作速度快,只有当通过new构造函数对象较为耗时或成本较高时,通过clone方法才能够获得效率上的提升。 简单实现 以简单的文档拷贝为例演示简单的原型模式。 先来演示浅拷贝 文档定义 public class Document implements Cloneable { private String mText ; private ArrayList < String > mImages = new ArrayList < > ( ) ; public String getmText ( ) { return mText ; } public void setmText ( String mText ) { this . mText = mText