装饰者模式通过使用继承,能够将对象一层一层地包装起来。1,Person是被装饰的对象,装饰者模式的类图中,所有的类都继承自Person类。Person类有一个show方法,用来展示Person对象哪些服饰装饰了。通过继承,所有的类都有show方法,因此当人穿上了某种服饰之后,就可能调用该服饰的show方法展示出来。当没有任何服饰装饰人时,执行show方法就表示最初始的人。 2,抽象的服饰类继承自Person类,尽管从自然概念上讲,服饰并不是人。但...
温故而知新,每次读设计模式都会有不同的体验,坚持每天一个设计模式,直到熟练运用设计模式。策略模式定义了很多完成相同工作的算法,但实现不同,它可以以相同的方式调用所有的算法,减少了算法和调用算法的耦合。以下是大话设计模式的策略类图/*** 上下文*/publicclass Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public Double getResult() {return strategy.getResul...
14,模板方法模式http://www.cnblogs.com/guoshiandroid/archive/2011/06/26/2090784.html 模板方法模式解释: 模板方法模式(Template Method
Pattern):定义一个操作中算法的骨架(或称为顶级逻辑),将一些步骤(或称为基本方法)的执行延迟到其子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 英文定义为:Define the skeleton of
an algorithm in an operation, deferring some steps to subc...
设计模式(Design Patterns) ——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设...
最近看了大话设计模式书中的装饰者模式,然后用C#照着写了一遍,发现运行出来的结果和书上不一样,然后又用Java写了一遍 和书上一样,同样的代码,不同的编译器与运行环境,Java和.NET 下面贴上代码
首先是Java实现
Beverage(饮料抽象类)
CondimentDecorator(调料抽象类,继承Beverage)
Latte(拿铁饮料,继承Beverage)
Mocha(摩卡调料,继承CondimentDecorator)publicabstractclass Beverage {public String descri...
大话设计模式第二章之:策略模式算法之间可以互相调用策略模式就是用来封装算法的。大话设计模式第三章之:单一职责原则单一职责原则:就一个类而言,应该仅有一个引起它变化的原因类承担的职责不能过多,因为有时,完成一个职责,会影响到其他职责的,手机只用来接电话,相机只用来拍照,功能才强大,集成太多了,其他功能就弱化了。对应一些问题,要方法化,要类分离化大话设计模式第四章之:开放-封闭原则开放-封闭原则:是说软...
一、简单工厂模式1.面向对象三大基本特性:封装、继承、多态封装:封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。该逻辑单元负责将所描述的属性隐藏起来,外界对客体内部属性的所有访问只能通过提供的用户接口实现。这样做既可以实现对客体属性的保护作用,又可以提高软件系统的可维护性。只要用户接口不改变,任何封装体内部的改变都不会对软件系统的其他部分造成影响。继承:继承性是子类...
外国人把那京戏叫做“Beijing Opera ” 没见过那五色的油彩楞往脸上画,四击头一亮相,(哇……)美极了妙极了,简直“ok”顶呱呱 ,蓝脸的多尔敦盗御马,红脸的关公战长沙 ,黄脸的典韦白脸的曹操 ,黑脸的张飞叫喳喳…… ,细心的小朋友,仔细区分就会发现,虽然每个京剧演员都不同,但基本上只具有几种脸型,长方形,圆形,细长,然后配上不同的妆容,胡子,眉毛,头饰,服装,有的再加点儿装饰物,就成了我们所看到的不同的演员...
大话设计模式-策略模式这章说的确实有瑕疵,比如说,策略模式引入的上下文,从类图上来说,是为了组合多个策略的,但是在文中却只提到了持有一个策略对象,那这样我为什么不直接使用策略接口呢,干嘛还要创建这一个没啥用的 中间类呢,而我的理解是,这个类的作用是用来聚合多个,算法策略,发挥者,再次组合多个形成一个整体的能力,所以才应该有这个中间类的存在,而策略模式与简单工厂的组合,有时候并不能使用反射去做优化,应...
实现:1.Singleton:publicclass Singleton{privatestatic Singleton instance;//构造方法为private,外部代码不能直接实例化private Singleton(){}publicstatic Singleton GetInstance(){if(instance==null){instance = new Singleton();}return instance;}}2.客户端代码:class Program{staticvoid Main(string[] args){Singleton singleton1 = Singleton.GetInstance();Singleton singleton2 = Singleton.GetInstance();if(sing...
概念:原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。 1using System;2using System.Collections.Generic;3using System.Text;4using System.Data;5 6namespace 原型模式7{8class Program9 {10staticvoid Main(string[] args)11 {12 Resume a = new Resume("大鸟");13 a.SetPersonalInfo("男", "29");14 a.SetWorkExperience("1998-2000",...
桥接模式 将抽象部分与他的实现部分分离,使他们可以独立的变化 抽象与实现分离并不是说 让抽象类与其派生类分离,因为这没有任何意义。实现是指抽象类和它的派生类用来实现自己的对象.桥接模式主要包含如下几个角色: Abstraction:抽象类。 RefinedAbstraction:扩充抽象类。 Implementor:实现类接口。 ConcreteImplementor:具体实现类 优点: 1、抽象和实现的分离。 2、优秀的扩展能力。...
一、UML图二、概念观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。三、说明角色:(1)Subject类:可以翻译为主题或者抽象通知者,一般用一个抽象类或者一个接口实现。他把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。(2)Obse...
观察者模式又称发布-订阅 (Publish/Subscribe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 感觉书上写的有点累赘,我重写了一下结构。package observer;import java.util.ArrayList;/*** 被观察者接口,或称通知者。**/publicclass Subject {// 用ArrayList 维护一对多的映射关系private ArrayList<...
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 首先,在设计初期阶段,应该要有意识的将不同的两个层分离。 其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。 第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,为新系统开发一个外观Faca...