第六章 穿什么有这么重要-装饰模式(读书笔记)

FPGA新手必看:Quartus生成jic文件全流程详解(附AS/JTAG模式选择指南) 本文详细解析了在Quartus中生成JIC文件以固化FPGA程序到Flash的全流程。核心在于理解JIC文件作为连接JTAG调试与AS固化的桥梁作用,并重点阐述了Convert Programming Files工具的关键配置步骤、AS与JTAG模式的选择逻辑,以及烧录过程中的常见问题排查指南,帮助开发者实现程序断电不丢失。 阅读详情

第六章 穿什么有这么重要-装饰模式

1.装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
2.(图6.4)Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator:装饰抽象类,继承了Component从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的.至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
3.装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
4.装饰模式是为己有功能动态地添加更多功能的一种方式。当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。
5.装饰模式可以让你全副武装到牙齿,也可以让你只挂一丝到内裤。
6.装饰模式的优点是:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。最大的好处是有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。
7.保证装饰类之间彼此独立,这样他们就可以以任意的顺序进行组合了。

 

图6.4 装饰模式的UML图

----------------------------------------------------------------------------------------------------------------------

6.2 小菜扮靓第一版

6.2程序 小菜扮靓第一版程序实现。如果要增加超人的装扮的话,就会违反开放封闭原则。

6.2.1 Person.h

#pragma once
#include <string>
#include <iostream>

class Person
{
public:
	Person(std::string name)
	{
		m_Name = name;
	};

	void WearTShirts(void)
	{
		std::cout << "大T恤" << std::endl;
	};

	void WearBigTrouser(void)
	{
		std::cout << "垮裤" << std::endl;
	};

	void WearSneakers(void)
	{
		std::cout << "破球鞋" << std::endl;
	};

	void WearSuit(void)
	{
		std::cout << "西装" << std::endl;
	};

	void WearTie(void)
	{
		std::cout << "领带" << std::endl;
	};

	void WearLeatherShoes(void)
	{
		std::cout << "皮鞋" << std::endl;
	};

	void Show(void)
	{
		std::cout << "装扮的" 
			<< m_Name << std::endl;
	};
private:
	std::string m_Name;
};

 

6.2.2 客户端程序

#include "stdafx.h"
#include "Person.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Person* person = new Person("小菜");

	std::cout << "第一种装扮" << std::endl;
	person->WearBigTrouser();
	person->WearTShirts();
	person->WearSneakers();
	person->Show();

	std::cout << "第2种装扮" << std::endl;
	person->WearSuit();
	person->WearLeatherShoes();
	person->WearTie();
	person->Show();
	return 0; 
}

----------------------------------------------------------------------------------------------------------------------

6.3 小菜扮靓第二版(图6.3) 用了继承和抽象类。

 6.3 小菜扮靓第二版的代码实现

6.3.1 Person.h

#pragma once
#include <string>
#include <iostream>

class Person
{
public:
	Person(std::string name)
	{
		m_Name = name;
	};

	void Show(void)
	{
		std::cout << "装扮的" 
			<< m_Name << std::endl;
	};
private:
	std::string m_Name;
};

//服饰抽象类
class Finery
{
public:
	virtual void Show(void) = 0;
};


class TShirts :public Finery
{
public:
	void Show(void)
	{
		std::cout << "大T恤" << std::endl;
	};
};

class BigTrouser :public Finery
{
public:
	void Show(void)
	{
		std::cout << "垮裤" << std::endl;
	};
};

class Sneakers :public Finery
{
public:
	void Show(void)
	{
		std::cout << "破球鞋" << std::endl;
	};
};

class Suit :public Finery
{
public:
	void Show(void)
	{
		std::cout << "西装" << std::endl;
	};
};


class Tie :public Finery
{
public:
	void Show(void)
	{
		std::cout << "领带" << std::endl;
	};
};

class LeatherShoe :public Finery
{
public:
	void Show(void)
	{
		std::cout << "皮鞋" << std::endl;
	};
};

 

6.3.2 客户端代码

#include "stdafx.h"
#include "person.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Person* xiaocai = new Person("小菜");
	Finery* dtx = new TShirts(); 
	Finery* kk = new BigTrouser();
	Finery* pqx = new Sneakers();

	dtx->Show();
	kk->Show();
	pqx->Show();
	xiaocai->Show();
	return 0;
}

这样写就好比你光着身子,当着大家的面,先穿T恤,再穿裤子,再穿鞋,仿佛在跳脱衣舞。这里有点建造者模式的味道,但是建造者模式的建造过程是稳定的,这里却不稳定。

----------------------------------------------------------------------------------------------------------------------

6.5 小菜扮靓第三版(图6.5)


6.5.1 Person.h

#pragma once
#include <string>
#include <iostream>

class Person
{
public:
	Person(std::string name)
	{
		m_name = name;
	};
	virtual void Show(void)
	{
		std::cout << "装扮的" << m_name << std::endl;
	};
	Person(){};
private:
	std::string m_name;
};

//服饰类
class Finery :public Person
{
public:
	void Decorator(Person* comp)
	{
		this->m_pComponent = comp;
	};

	void Show(void)
	{
		if (m_pComponent != NULL)
		{
			m_pComponent->Show();
		}
	};
protected:
	Person* m_pComponent;
};

//具体服饰类
class TShirts :public Finery
{
public:
	void Show(void)
	{
		std::cout << "大T恤" << std::endl;
		Finery::Show();
	}
};

class BigTrouser :public Finery
{
public:
	void Show(void)
	{
		std::cout << "垮裤" << std::endl;
		Finery::Show();
	};
};

class Sneakers :public Finery
{
public:
	void Show(void)
	{
		std::cout << "破球鞋" << std::endl;
		Finery::Show();
	};
};

class Suit :public Finery
{
public:
	void Show(void)
	{
		std::cout << "西装" << std::endl;
		Finery::Show();
	};
};


class Tie :public Finery
{
public:
	void Show(void)
	{
		std::cout << "领带" << std::endl;
		Finery::Show();
	};
};

class LeatherShoe :public Finery
{
public:
	void Show(void)
	{
		std::cout << "皮鞋" << std::endl;
		Finery::Show();
	};
};


6.5.2 客户端代码

#include "stdafx.h"
#include "Person.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Person* xiaocai = new Person("小菜");
	std::cout << "第一个装扮" << std::endl;
	
	Sneakers* pqx = new Sneakers();
	BigTrouser* kk = new BigTrouser();
	TShirts* dtx = new TShirts();

	pqx->Decorator(xiaocai);
	kk->Decorator(pqx);
	dtx->Decorator(kk);
	dtx->Show();

	std::cout << "第二个装扮" << std::endl;
	LeatherShoe* px = new LeatherShoe();
	Tie* tie = new Tie();
	Suit* suit = new Suit();
	px->Decorator(xiaocai);
	tie->Decorator(px);
	suit->Decorator(tie);
	suit->Show();
	return 0;
}

 光着膀子,打着领带,下身跨裤,左脚皮鞋,右脚破球鞋的极具个性的形象就可以简简单单的实现了。这个例子就是装饰者模式的完美体现。

----------------------------------------------------------------------------------------------------------------------



 

 

 

 

 

STM32驱动AS5600磁性旋转位置传感器模块 文章目录简介引脚定义I2C接口写数据读数据从指定的地址开始读数据驱动程序cubeMX配置驱动程序`bsp_as5600.h``bsp_as5600.c`测试程序参考资料 简介 AS5600 是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。 这种非接触式系统测量径向磁化轴上磁铁的绝对角度。 该 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何同质外部杂散磁场的影响。 引脚定义 I2C接口 7位设备地址为0x36(二进制表示为0110110) 支持标准模式和 阅读详情

相关推荐

「Unity3D」Addressable版本冲突解析:SBP与Addressables兼容性问题实战指南

本文深入解析Unity3D中Addressable与SBP(Scriptable Build Pipeline)版本冲突问题,提供实战解决方案。当遇到「Build Task CreateBuiltInShadersBundle failed」错误时,可通过版本匹配、临时资源引用或构建参数调整解决。文章详细分析兼容性原理,并给出版本组合指南与最佳实践,帮助开发者高效处理资源构建问题。

weixin_29001683的博客 410

第六章 穿什么有这么重要---装饰模式(读书笔记)

1.装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 2.(图6.4)Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator:装饰抽象类,继承了Component从外类来扩展Component类的功能,但对于Com

D-Boy的专栏 752

Halcon异常检测训练避坑指南:如何避免GPU内存溢出和样本不足问题

本文针对Halcon深度学习异常检测训练中常见的GPU内存溢出和样本不足两大难题,提供了从原理分析到实战解决方案的深度指南。通过调整批次大小、图像尺寸、使用梯度累积等技巧有效管理显存,并利用针对性数据增强与人工合成策略破解小样本困境,帮助开发者构建稳定高效的训练流程。

river的博客 216

《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式

装饰模式(Decorator)   动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。 // FineryTest01.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include string> using

cv小学dl三年级 1057

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 548

BEV感知技术全景解析:从纯视觉到多传感器融合的实战指南

本文全面解析了自动驾驶中的BEV感知技术,从纯视觉到多传感器融合的实战应用。文章深入探讨了BEV如何提供“上帝视角”,对比了IPM、Lift-Splat-Shoot及Transformer等核心实现范式,并详细阐述了多传感器融合(尤其是中融合)的工程实践与优势,为开发者提供了从理论到原型搭建的完整指南。

win55的博客 1141

《大话设计模式》读书笔记-第6章 装饰模式

1.装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 2.装饰模式(decorator)结构图 Component是定义一个对象的接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Co...

weixin_34367257的博客 128

深入解析CAN2.0A与CAN2.0B协议:帧格式与通信机制对比

本文深入对比了CAN2.0A与CAN2.0B协议的核心差异,重点解析了11位标准帧与29位扩展帧的帧格式、标识符长度及通信机制。文章阐述了CAN2.0B向下兼容的特性,并探讨了在汽车电子、工业控制等复杂网络中,如何根据项目需求、兼容性及实时性要求,在标准帧与扩展帧之间做出合理选择。

weixin_29163797的博客 395

读书笔记----《编写高质量代码:改善Java程序的151个建议》第六/七章

读书笔记----《编写高质量代码:改善Java程序的151个建议》第六/七章 第六章 枚举和注释83 推荐使用枚举定义常量84:使用构造函数协助描述枚举项85:小心switch带来的空值异常86:在switch的default代码块中增加AssertionError错误87:使用valueOf前必须进行校验88:用枚举实现工厂方法模式更简洁89:枚举项的数量限制在64个以内90:小心注解继承91:...

syney120的专栏 392

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2765

OpenAI Codex 桌面端国内使用全坑解決指南(2026 Windows 实测)

本地文件报错:SQLite 初始化失败、启动闪退、卡加载页 → 本地缓存/数据库损坏,和网络无关网络地区报错→ 网络IP/地区被拦截,和本地软件文件无关Codex 桌面端的大部分报错,都不是软件故障,而是海外软件适配国内网络、国内模型协议不兼容导致的适配问题。不用盲目重装、换网络、改系统设置,只要区分「本地文件问题」和「网络地区问题」,搭配国内大模型 API 替代方案,就能完美解决所有痛点。(注:部分内容可能由 AI 生成)

ups_hxc的博客 1126

[读书笔记]大话设计模式(程杰)

https://github.com/iyjhabc/Design-Pattern 第一章:简单工厂模式 使用一个工厂类来根据参数调用不同的函数。因此增加功能时只需改变工厂类以及新增函数即可。 class oper { protected://使用保护成员,子类可以访问。子类不能访问私有成员 double lhs; double rhs; public: ...

weixin_30425949的博客 159

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 451

java与模式 读书笔记(转载)

中国是一个含蓄的民族,处对象一般都得通过一个介绍人。这是一本阐述微观设计的书,而不是阐述宏观设计的书。《Java与模式》首先阐述了代码的设计原则,又描述了怎样来创建一个类或对象,紧接着告诉大家怎样来组织这些类和对象来实现功能。它是设计模式,而不是架构模式。OO面向对象编程,实质上是面向抽象编程,即面向接口编程。所谓的面向接口编程,指类之间都要使用接口来通信。类来封装对象的行为,接口来封装类之间

天山童老的专栏 442

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Scala程序设计读书笔记(6-10)

第六章 函数值和闭包 1. 高阶函数  以其它函数为参数的函数。 2. 函数值  可以在函数里创建函数,将函数赋给引用。函数参数中例如codeBlock: Int => Int。函数值包含多行代码或者作为参数传入时有多个参数,需要用圆括号包起来。 3. 具有多参数值的函数值 具有多个参数的函数值例如operation: (Int, Int) => Int)。想要遍历容器中元素,执行一些操作可

John Wong's Blog 1033

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《图解设计模式》读书笔记

关于设计模式的思想: 1.设计模式的作用,就是帮助我们编写可复用的类。通过设计,使代码解耦,响应变化。 2.不要使用具体类来编程,要优先使用抽象类和接口来编程 3.良好的实际模式,可以减少系统的复杂性,提高系统易用性 4.定义抽象类,抽象重要功能(API),把“定义”和“实现”分离开来,从而实现解耦和可复用 关于UML: 1.斜体方式显示:表示抽象类或者抽象方法 2...

weixin_30568715的博客 136

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【设计模式之禅 第2版】读书笔记

自己练习的源码地址:https://git.oschina.net/snnhoo/DesignPattern.git 欢迎推送 第一章 单一职责原则 简称SRP:Single Responsibility Principle 定义:应该有且仅有一个原因引起类的变更 好处: 类复杂度降低,职责明确 可读性高 可维护性高 变更引起风险低 接口设计要单一,实现要根据...

weixin_30642305的博客 144

设计模式简介

现在在看《大话设计模式》这本书,根据这本书做一些读书笔记。第一章 简单工厂模式有不同的产品类,而工厂类去选择某一个产品类进行生产(初始化),即在工厂类中进行switch判断。第二章 策略模式在将策略类进行封装调用。第三章 单一职责原则 每个类的职责是单一的。第四章 开闭原则对扩展开放,对修改闭合。(只允许添加类,不允许修改类)。第五章 依赖倒转原则抽象不依赖细节,细节依赖抽象。高层模块不依赖于低层模

包子骑士的博客 340

第七章 为别人做嫁衣-代理模式(读书笔记)

为别人做嫁衣-代理模式 1.代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 2.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不用地址空间的事实。 3.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。打开网页时代理存储了真实图片的路径和尺寸,这个就是虚拟代理。 4.安全代理:用来控制真实对象访问时

千月星跡 4777

第二十九章 OOTV杯超级模式大赛-模式总结(读书笔记)

第29章OOTV杯超级模式大赛-模式总结 29.1 演讲任务  小菜睡眼朦胧,趴到了桌上,打起盹来,不一会儿就进入了梦乡。 29.2 报名参赛  工厂模式三姐妹:工厂方法,抽象工厂方法,简单工厂方法。简单工厂方法不符合开放封闭原则。所以在预选赛上被淘汰了。简单工厂模式的缺点就是在对每一次修改的时候都要更改工厂类,这就是对修改开放了。 29.3 超模大赛开幕式  开幕式到场来宾:抽象先生

千月星跡 1991

第二章 商品促销-策略模式(读书笔记)

第二章 商品促销-策略模式(读书笔记)  1.面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。 2.打一折和九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的。所有每一种打折建一个类是非常不合适的。 3.简单工厂模式只是解决对象的创建问题,如果在商品促销系统中,经常性地改打折额度和返利额度,每次维护或扩展收费方式都要

千月星跡 1735

第十七章 在看NBA需要翻译--适配器模式(读书笔记)

第十七章 在看NBA需要翻译--适配器模式 17.1 在NBA我需要翻译  向姚明这样的在国外打球的运动员来说,如果不懂外语,球技再高,估计也是不可能在国外待很长时间的。这个就可以和适配器模式挂上钩了。 17.2 适配器模式(Adapter)  将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。简单来说,就是需要的东西就

千月星跡 1308

第十四章 老板回来我不知道--观察者模式(读书笔记)

首先我们来看看下面的代码: /*同事的类,在这里他要知道秘书的存在才可以*/ #pragma once #include class Secretary; class StockObserver { public: StockObserver(void); StockObserver(std::string name, Secretary* sub); ~Stock

千月星跡 1217

第二十五章 世界需要和平--中介者模式(读书笔记)

第25章 世界需要和平--中介者模式 25.1 世界需要和平  由于各国之间代表的利益不同,所以矛盾冲突是难免的,但如果有这样一个组织,由各国的代表组成,用来维护国际和平与安全,解决国际间经济,社会,文化和人道主义性质的问题,这样的类似联合国的组织就是一个调停者,中介者模式。  国与国之间的关系,就类似于不同的对象与对象之间的关系,这就要求对象之间需要知道其他所有对象,尽管将一个系统分割成许

千月星跡 1192

第八章 雷锋依然在人间-工厂方法模式(读书笔记)

雷锋依然在人间-工厂方法模式 1.简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。 2.工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 3.工厂方法模式的好处就是在扩展功能的时候,只要扩展了变化,不用修改现有的类了,也

千月星跡 1132

第十六章 无尽加班何时休--状态模式(读书笔记)

第十六章 无尽加班何时休--状态模式 16.1 加班又是加班! 上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬。其实是一种状态的变化,在不同的时间,会有不同的状态。这些状态可以用状态模式来实现。 16.2 工作状态-函数版  在这个版本中是用面向过程来实现的。 代码1: 16.3 工作状态-分类版   将工作时间,是否完成工作任务这两个属性进行封装。实现了部分的面向对象。而写程序这个

千月星跡 1101
上一篇: 第三,四,五,十一章 设计模式和面向对象的各种规则(读书笔记)
下一篇: 单片机中的各种存储器
进击的横打
博客等级 码龄19年 2万+粉丝 1298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值