设计模式
运妙心藏
C/Cpp/Java/C#/Lua/PHP/Android/Python 程序員 手游 前端 后台
展开
-
设计模式:策略模式(Strategy Pattern)
策略模式定义:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。样例:UML类图实现代码:Duck.java/** * 鸭子超类 * @author LiuJing * */public abstract class Duck { FlyBehavior flyBehavior; QuackB原创 2017-07-28 16:16:48 · 382 阅读 · 0 评论 -
C#设计模式之:装饰模式
装饰模式(Decorator): 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生在子类更为灵活UML类图 Component 是定义一个对象接口,可以给这些对象动态地添加职责 ConcreteComponent是定义一个具体对象,也可以给这个对象添加一些职责 Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功...原创 2018-09-06 17:20:18 · 324 阅读 · 0 评论 -
C#设计模式之:备忘录模式
备忘录模式(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态UML代码class Memento{ private string state; public Memento(string state) { this.state = state;...原创 2018-09-17 13:51:34 · 682 阅读 · 3 评论 -
C#设计模式之:组合模式
组合模式Composite将对象组合成树形结构以表示 ’部分-整体‘ 的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。UML代码abstract class Component{ protected string name; public Component(string name) { this.name = ...原创 2018-09-17 15:39:18 · 964 阅读 · 0 评论 -
C#设计模式之:原型模式
原型模式(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。UML 代码abstract class Prototype{ private string id; public Prototype(string id) { ...原创 2018-09-10 14:42:31 · 862 阅读 · 0 评论 -
C#设计模式之:模板方法模式
模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。UML代码abstract class AbstractClass{ public abstract void PrimitiveOperation1(); public abstr...原创 2018-09-10 14:59:45 · 512 阅读 · 0 评论 -
C#设计模式之:迪米特法则(Lod)
迪米特法则(Lod):如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。该法则强调的是,每一个类都应当尽量降低成员的访问权限其根本思想是:强调了类之间的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。...原创 2018-09-10 15:10:27 · 532 阅读 · 0 评论 -
C#设计模式之:外观模式
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用UML代码class SubSystemOne{ public void Method() { Console.WriteLine("子系统方法一"); }}class SubSystemTwo{...原创 2018-09-10 16:30:17 · 292 阅读 · 0 评论 -
C#设计模式之:代理模式
情景描述:小A通过小B追求小C 其中小B是代理无代理小B时,小A亲自送东西给小C 代码class A{ C c; public A(C c) { this.c = c; } public void GiveDolls() { Console.WriteLine(c.Name + ",送你洋娃娃...原创 2018-09-07 13:59:43 · 439 阅读 · 0 评论 -
C#设计模式之:工厂方法模式
工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类回顾之前简单工厂 简单工厂的核心代码class OperationFactory{ public static Operation createOperate(string operate) { Operatio...原创 2018-09-07 15:33:37 · 634 阅读 · 0 评论 -
C#设计模式之:抽象工厂模式与反射
复习工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类UML代码class User{ private int _id; public int Id { get => _id; set => _id = value; } private string _name; public string Name { ge...原创 2018-09-13 14:33:18 · 1052 阅读 · 0 评论 -
C#设计模式之:状态模式(State)
状态模式State 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以复杂的判断逻辑简化。UML代码abstract class State{ public abstract void Handle...原创 2018-09-13 17:05:45 · 2404 阅读 · 0 评论 -
C#设计模式之:适配器模式
适配器模式(Adapter) 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器有两种:1,类适配器模式通过多重继承对一个接口与另一个接口进行匹配2,对象适配器模式UML 代码class Target{ public virtual void Request...原创 2018-09-14 14:54:57 · 226 阅读 · 0 评论 -
C#设计模式之:桥接模式
桥接模式Bridge将抽象部分与它的实现部分分离,使它们都可以独立地变化。由于实现的方式有很多种,桥接模式的核心意图就是把这些实现独立出来,让它们各自地变化。这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。UML代码abstract class Implementor{ public abstract void Operation();}class...原创 2018-09-19 16:25:21 · 337 阅读 · 0 评论 -
C#设计模式之:命令模式
命令模式Command将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。UML代码abstract class Command{ protected Receiver receiver; protected Command(Receiver receiver) { this.rece...原创 2018-09-19 16:44:42 · 622 阅读 · 0 评论 -
C#设计模式之:职责链模式
职责链模式(Chain Of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。UML代码abstract class Handler{ protected Handler successor; public void SetSuccessor(...原创 2018-09-20 10:59:02 · 362 阅读 · 0 评论 -
C#设计模式之:设计原则
1,单一职责原则(SRP):就一个类而言, 应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。2,开放-封闭原则对于扩展是开放的,对于更改是封闭的3,依赖倒置原则 与 里氏替换原则依赖倒置原则 抽象不应该依赖细节,细节应...原创 2018-09-06 15:29:40 · 333 阅读 · 0 评论 -
C#设计模式之:策略模式
需求:做一个商场收银软件,营业员根据客户所购买商品的单价和数量,向客户收费。 额外需求1:打折(8折,7折,5折不等) 额外需求2:返现(满300返100,满200返50等)使用简单工厂实现UML类图代码namespace PatternTest.Strategy{ abstract class CashSuper { public...原创 2018-09-06 14:45:42 · 302 阅读 · 0 评论 -
C#设计模式之:简单工厂
请用C#面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。面向过程:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PatternTest{ cla...原创 2018-09-05 16:07:10 · 269 阅读 · 0 评论 -
Java设计模式:观察者模式(Observer Pattern)
观察者模式:类似于报纸和杂志的订阅出版者+订阅者=观察者模式1.报纸的业务就是出版报纸。 2.向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订阅用户,你就会一直收到新报纸。 3.当你不想再看报纸时,取消订阅,他们就不会再送新报纸来。 4.只要报社还在运营,就会一直有人或单位向他们报纸或取消报纸。 这里:你要把出版者改成“主题(Subject)”,订阅者改成“观察者(O原创 2017-07-31 16:19:29 · 2484 阅读 · 0 评论 -
Java设计模式:工厂方法模式(Factory Method Pattern)
上一次的简单工厂,以一个披萨店为例;这里同样如此;这里,披萨店要开分店纽约披萨店:奶酪、蛤蜊、意式辣肠、蔬菜等类型的披萨芝加哥披萨店:奶酪、蛤蜊、意式辣肠、蔬菜等类型的披萨两种店都供应这些披萨,但同种名称的披萨的细节却不同,每家店都供应其独特的披萨。UML类图Pizza.java 抽象类,披萨超类package com.jing.factory;import原创 2017-08-07 17:32:43 · 402 阅读 · 0 评论 -
Java设计模式:观察者模式(Observer Pattern)续
本篇要说明的是Java内置的观察者模式;涉及import java.util.Observable;import java.util.Observer;原创 2017-08-01 11:06:24 · 360 阅读 · 0 评论 -
Java设计模式:适配器模式(Adapter Pattern)
适配器模式定义适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器有两种类型:对象适配器、类适配器对象适配器UML类图类适配器UML类图个人认为两者的优劣势对象适配器:使用组合,不仅可以适配某个类,也可以适配该类的任何子类,一般而言,是单向的适配;类适配器(注:Java中原创 2017-08-17 15:02:54 · 405 阅读 · 0 评论 -
Java设计模式:外观模式(Facade Pattern)与最少知识原则
外观模式定义外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。UML类图OO原则最少知识原则(等同于 最少知道原则):只和你的密友谈话。优缺点虽然这个原则减少了对象之间的依赖,这样就减少了软件的维护成本。但也会导致更多的“包装”被制造出来,以处理与其它组件的沟通,这样可能会导致复杂度和开发时间的增加,并原创 2017-08-17 17:33:17 · 417 阅读 · 0 评论 -
Java设计模式:装饰者模式(Decorator Pattern)
装饰者模式,涉及的重要设计原则:类应该对扩展开放,对修改关闭。装饰者模式定义:装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。UML类图:装饰者模式事例:咖啡店咖啡种类:1)深焙咖啡(DarkRoast)2)家庭混合咖啡(HouseBlend)3)浓咖啡(Espresso)4)低咖啡因咖啡(Decaf)5)原创 2017-08-04 10:26:27 · 471 阅读 · 0 评论 -
Java设计模式:抽象工厂模式(Abstract Factroy Pattern)
抽象工厂模式定义抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。样例上次的工厂方法模式使用的是披萨店的例子,为的是解决在各个不同的地区开的分店会做不同类型的披萨;现在防止分店使用低价原料增加利润,损坏品牌,要确保每家店使用高质量的原料,所以打算使用生产原料的工厂;但问题是每家分站使用的配料有可能不一样,如纽约的蛤蜊是新鲜的, 芝加原创 2017-08-11 16:39:51 · 382 阅读 · 0 评论 -
Java设计模式:单例模式(Singleton Pattern)
单例模式定义:单例模式确保一个类只有一个实例,并提供一个全局访问点。经典的单例模式模型// NOTE: This is not thread safe!public class Singleton { private static Singleton uniqueInstance; // other useful instance variables here原创 2017-08-14 11:14:52 · 262 阅读 · 0 评论 -
Java设计模式:简单工厂模式(Simple Factory Pattern)
工厂模式:1)简单工厂2)工厂模式简单工厂模式:通常使用静态方法,因为这样它可以不需要创建对象;缺点:不能通过继承来改变创建方法的行为。简单工厂其实不是一个设计模式,反而更像一种编程习惯。事例:一个披萨店,会生产各种类型的披萨,如蔬菜类、蛤蜊类、奶酪类、意大利辣肠类等。步骤:1)选择一种类型的披萨,配置它的材料2)准备、烧烤、切片、包装 UML类原创 2017-08-07 11:15:10 · 545 阅读 · 0 评论 -
Java设计模式:命令模式(Command Pattern)
命令模式定义命令模式将“请求”封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销的操作。简易UML类图1)Command 为所有命令声明了一个对象。调用命令对象的excute()方法就可以让接收者进行相关的动作。它也具备一个undo()方法,支持撤销。2)客户端负责创建某一个具体的命令对象 ConcreteCommand,并设置其接收者原创 2017-08-15 16:31:23 · 742 阅读 · 0 评论 -
c++ 单例模式下实现内存自动回收或销毁
Java与C#中的单例模式可以不用考虑内存的回收,但C++的不考虑是不行...代码如下:class CSingleton{ // 其它成员 public: static CSingleton * GetInstance() { if (m_pInstance == NULL) m_pInstance = new CSingleton(); return m_pIn原创 2017-11-20 17:28:05 · 2287 阅读 · 0 评论 -
经典MVC总结
MVC(Model - View - Controller)由模型、 视图、 控制器 组成。学习MVC最好的方法就是看它由哪些模式共同组成。一、模型(Model)利用”观察者模式”让视图和控制器可以随最新的状态而改变。模型实现了观察者模式,当状态改变时,相关对象将持续更新。使用观察者模式,可以让模型完全独立于视图和控制器。同一个模型可以使用不同的视图,甚至可以同时使用多个视图。二、视图...原创 2018-09-04 15:47:40 · 1042 阅读 · 0 评论 -
C#设计模式之:建造者模式
建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示它主要用于创建一些复杂对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。它使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。UML CODE...原创 2018-09-11 11:24:51 · 374 阅读 · 0 评论 -
C#设计模式之:观察者模式与委托
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。UMLCODEabstract class Observer{ public abstract void Update();}abstract class Subject{ privat...原创 2018-09-11 16:20:02 · 1140 阅读 · 0 评论 -
UML简述
UML类图之间的关系当一个类是“一种”另一个类时: is-a当两个类之间存在关联时: 一个类“包含”另一个类时:has-a一个类“使用”另一个类时:use-a一个类“创建”另一个类时:create-a组合:如 汽车 与 发动机,汽车少了发动机,就不是汽车了聚合:如 机场 与 飞机,机场少了个飞机,还可以是机场 类图信息类名类的数据成员类的方法(函数)表示访...原创 2018-09-05 14:43:08 · 355 阅读 · 0 评论 -
设计模式总结
一、设计原则单一职责原则一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。from:百度百科开闭原则(Open Close Principle)开闭原则就是说对扩展开...原创 2018-10-08 11:16:20 · 2203 阅读 · 0 评论