
设计模式-架构-重构
文章平均质量分 92
Jack2013tong
记录所见所用及碰到的问题,同时也希望这些能帮助到其他人.分享知识,共同提高
展开
-
阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!
1、概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。2、基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍。1)什么是分布式?系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上。2)什么是高.转载 2020-11-15 08:59:25 · 575 阅读 · 1 评论 -
状态模式 - State
状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象的状态转换的条件表达式过于复杂时的情况,把状态判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。如果状态判断很简单,就没有必要用‘状态模式’了状态模式结构图State类,抽象状态类,定义一个接口以封装与Context的一个特定状态的行为原创 2014-02-18 18:08:22 · 867 阅读 · 0 评论 -
抽象工厂模式 - Abstract Factory
抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。获得实例的两种写法对比,如图代码结构图:DataAccess类,用反射技术,取代了IFactory,SqlserverFactory,AccessFactory.using System;using System.Reflection;using S原创 2014-02-18 18:07:09 · 792 阅读 · 0 评论 -
观察者模式 - Observer
观察者模式(Observer),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己。观察者模式结构图:Subject 类,可以翻译为主题或抽象通知者,一般用一个抽象类或一个接口实现。它把所有对观察者对象的引用保存在一个集合里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观原创 2014-02-18 18:05:52 · 1081 阅读 · 0 评论 -
建造者模式 - Builder 生成器模式
建造者模式(Builder),也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造小人的代码实现abstract class PersonBuilder{ protected Graphics g; protected Pen p; public PersonBuild(Graphics g,Pen p) { thi原创 2014-02-18 18:04:29 · 1056 阅读 · 0 评论 -
外观模式 - Facade
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式结构图:四个子系统的类class SubSystemOne{ public void MethodOne() { Console.WriteLine("子系统方法一"); }}class SubSystemTwo{原创 2014-02-18 18:03:15 · 949 阅读 · 0 评论 -
模板方法模式 - Template
模板方法模式,定义一个操作的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式结构图:AbstractClass 是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方原创 2014-02-18 18:00:56 · 758 阅读 · 0 评论 -
原型模式 - Prototype
原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式结构图:原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。我们来看看基本的原型模式代码。原型类abstract class Prototype{ private string id; public Prototype(str原创 2014-02-18 17:59:22 · 851 阅读 · 0 评论 -
装饰模式
装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。Component是定义一个对象的接口,可以给这些对象动态地添加职责,ContreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator ,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来原创 2014-02-17 18:40:06 · 637 阅读 · 0 评论 -
面向对象编程理论知识与思想(oop的思想与原则)
面向对象编程理论知识与思想(oop的思想与)第一部分:oop理论基础对象:对象是一个自包含的实体,用一组可识别的特性和行为来标识。面向对象编程(Object-Oriented Programming,OOP)其实就是针对对象编程。类:类就是具有相同的属性和功能的对象的抽象的集合。第一,类名称首字母要大写。第二,对外公开的方法需要用 "public"修饰符。实例就是一个真转载 2014-05-09 14:01:57 · 3649 阅读 · 0 评论 -
软件的可维护性问题知识与分析
前言 很多包括自己在内的开发人员都会经常去借用(我们不用剽窃这个词了!呵呵)开源代码进行二次开发;或者在前辈的遗留代码下,继续修修补补。这种经历往往并不像看起来那么简单——有时看懂,进而修改别人的少许代码,都会觉得老虎天——无从下手,究其原因主要是代码晦涩,关系复杂,难以隔离影响等。 而这时我们或者抱怨前人代码写的愚蠢,垃圾;或者又会自惭自己编码水平太次。其实这种困境的起转载 2014-08-22 16:28:48 · 13630 阅读 · 0 评论 -
在VS中计算代码度量值
从VS2008开始,有一个新的工具可以帮助开发人员更好地了解自己编写的代码。这个工具就是“计算代码度量值” 关于该功能及几个指标的具体介绍,请参考下面的官方文档 代码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码。利用代码度量,开发人员可以了解哪些类型和/或方法应该返工或进行更彻底的测试。开发团队可以识别潜在的风险、了解项目的当前状态,并跟踪软件转载 2014-08-22 16:41:03 · 8383 阅读 · 0 评论 -
敏捷软件开发、模式、原则与实践摘录
敏捷软件开发、模式、原则与实践摘录敏捷开发遵循的原则:我们最优先要做的是通过尽早的,持续的交付有价值的软件来满足客户满意。即使到了开发后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。经常性地交付可以工作的软件,交付的间隔可以从几星期到几个月。时间间隔越短越好。在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。围绕被激励起来的个体来构建项目。给他们提供所原创 2014-08-25 17:36:31 · 1601 阅读 · 0 评论 -
自构建工具TeamCity的安装及使用
自构建工具TeamCity的安装及使用第2章 安装步骤2.2 软件安装2.2.1 安装包位置\\192.168.0.5\persons\下载软件\TeamCity-8.1.5.exe 附属安装包\\192.168.0.5\persons\下载软件\WDeploy.exe2.2.2 安装点击 Teamcity-8.1.5.exe 按提示安装即可,安装完成后在安原创 2015-01-19 17:24:11 · 16238 阅读 · 0 评论 -
单元测试的重要性
单元测试的重要性 序:这是一篇写给所有开发者的建议,虽然不包含技术成分,但比技术本身成为重要.测试的必要性原创 2016-06-29 21:07:06 · 3867 阅读 · 1 评论 -
设计模式原则与思想(c#)
声明:关于设计模式里讲解及代码都是从大话设计模式中摘录编程原则一 尽量避免重复代码;面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同的属性功和功能的对象的抽象集合才是类;原创 2014-02-17 18:31:32 · 1433 阅读 · 0 评论 -
迭代器模式 - Iterator
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示.迭代器模式结构图:foreach in,IEnumerable接口都是为迭代器模式准备的,C#,java等本身已经把这个模式做在语言中了。迭代器模式实现Iterator 迭代器抽象类abstract class Iterator{ public abstract原创 2014-02-18 18:11:34 · 1056 阅读 · 0 评论 -
桥接模式 - Bridge
桥接模式手机软件代码结构手机软件的代码实现手机软件抽象类abstract clsss HandsetSoft{ public abstract void Run();}游戏,通讯录等具体类//手机游戏class HandsetGame : HandsetSoft{ public override void Run() { Console原创 2014-02-19 17:13:35 · 812 阅读 · 0 评论 -
命令模式-Command
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式结构图:Commandod ,用来声明执行操作的接口abstract class Command{ protected Receiver receiver; public Command(Receiver receiver原创 2014-02-19 17:14:27 · 1062 阅读 · 0 评论 -
单例模式 - Singleton
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。单例模式结构图:Singleton类,定义一个GetInstance操作,允许客户访问它的唯一实例原创 2014-02-19 17:11:27 · 1104 阅读 · 0 评论 -
组合模式 - Composite
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式结构图:代码实现Component 为组合中的对象声明接口,在适当的的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件abstract class Component{ protect原创 2014-02-18 18:10:44 · 982 阅读 · 0 评论 -
备忘录模式 - Memento
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式结构图:备忘录模式基本代码发起人 Originator类class Originator{ //需要保存的属性,可能有多个 private string state; public string State原创 2014-02-18 18:10:01 · 773 阅读 · 0 评论 -
适配器模式 - Adapter
适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要解决什么问题呢? 简单地说,就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是就想办法适配它。在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们就考虑用适配器,目的是使控制范围之外的一个原有对象与某个接原创 2014-02-18 18:09:13 · 789 阅读 · 0 评论 -
工厂方法模式
工厂方法模式计算器的工厂方法模式实现的结构图是这样的图:工厂方法模式与简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。图:计算类的结构图:工厂方法模式实现时,客户端需原创 2014-02-18 17:58:21 · 684 阅读 · 0 评论 -
代理模式
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。图:Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy.abstract class Subject{ public abstract void Request();}RealSubject类,定义Prox原创 2014-02-17 22:49:20 · 610 阅读 · 0 评论 -
策略模式
策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户.Strategy类,定义所有支持的算法的公共接口//抽象算法类abstract class Strategy{ //算法方法 public abstract void AlgorithmInterface();}ConcreteStra原创 2014-02-17 18:35:32 · 648 阅读 · 0 评论 -
简单工厂模式
简单工厂模式代码public class Operation{ private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA;}; set { _numberA=value;}; } public d原创 2014-02-17 18:33:47 · 723 阅读 · 1 评论 -
享元模式-Flyweight
享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。享元模式结构图:代码实现Flyweight类,它是所有具体享元类的超类或接口,通过这个接口,Flyweight可以接受并作用于外部状态abstract class Flyweight{ public abstract void Operation(int extrinsicstate);}C原创 2014-02-19 17:17:49 · 917 阅读 · 1 评论 -
访问者模式-Visitor
访问者模式-Visitor首先看一下男人与女人不同状态下反应的实现代码结构图:代码状态的抽象类和人的抽象类abstract class Action{ //得到男人的结论或反应 public abstract void GetManConclusion(Man ConcreteElementA); //得到女人的结论或反应 public abstract原创 2014-02-19 17:20:33 · 910 阅读 · 0 评论 -
解释器模式-interpreter
解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如是一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。象正则表达式,浏览器等都可能理解成这种应用。解释器模式结构图:原创 2014-02-19 17:19:11 · 849 阅读 · 0 评论 -
中介者模式-Mediator
中介者模式(Mediator),用一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引和,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式结构图:代码实现Mediator类,抽象中介者abstract class Mediator{ //定义一个抽象的发送消息方法,得到同事对象和发送消息 public abstract void Send原创 2014-02-19 17:16:35 · 914 阅读 · 0 评论 -
职责链模式- Chain of Responsibility
职责链模式(Chain of Responsibility): 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。职责链模式结构图:代码实现Handler类,定义一个处理请求的接口abstract class Handler{ protected Handler successo原创 2014-02-19 17:15:15 · 780 阅读 · 0 评论