设计模式

原创 2006年05月28日 20:57:00

1、单件模式Singleton:

public class LogWriter

{
//申明一个静态的变量,类型为类本身
private static LogWriter _instance = null;
//将类的构造函数私有化,使得这个类不可以被外界创建
private LogWriter()
{
}

//提供静态的方法,创建类的实例
public static LogWriter GetInstance()
{
if (_instance == null)
{
_instance = new LogWriter();
}
return _instance;
}
//下面实现类的其他功能
//....
}

调用者不可以通过new的形式得到Singleton的实例,调用的例子如下:
LogWriter log = LogWriter.GetInstance();
log.Debug("hello world");
 
单件模式适用于整个系统中某个对象是唯一的,或者是有固定数量的情况

2、工厂模式Factory

工厂模式的要点:

    1:存在一个创建对象的工厂;
    2:调用者从工厂中取得某些对象;
    3:由工厂决定如何创建对象;
    4:客户不知道对象是如何生成的。

Namer对象是FirstFirst和LastFirst的基类,用户调用Namer类的时候,不直接new出Namer类或者他的子类,而是使用NameFactory的getName方法得到具体的对象。这样在用户就不用关心自己正在使用的是哪一个Namer,正在调用哪一个方法。用户只针对Namer进行工作,而不用关心具体的类型。在实际工程中可以将Namer类的子类的构造函数只对NameFactory开放,进一步限制程序员。

C#代码如下:
1:Namer的实现
using System; 
namespace NameFactory
{
      /// <summary>
     /// Summary description for Namer.
    /// </summary>
    //Base class for getting split names
    public class Namer 
    {
         //parts stored here
         protected string frName, lName; 

         //return first name
         public string getFrname()
         {
              return frName;
        }

        //return last name
        public string getLname()
        {
             return lName;
       }
    }
}


2:FirstFirst类的实现

using System;
namespace NameFactory
{
/// <summary>
/// Summary description for FirstFirst.
/// </summary>
public class FirstFirst : Namer
{
public FirstFirst(string name)
{

int i = name.IndexOf (" ");
if(i > 0) {
frName = name.Substring (0, i).Trim ();
lName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
}

3:LastFirst类的实现
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for LastFirst.
/// </summary>
public class LastFirst : Namer
{
public LastFirst(string name) {
int i = name.IndexOf (",");
if(i > 0) {
lName = name.Substring (0, i);
frName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
}

4:NameFactory,工厂的实现

using System;
namespace NameFactory
{
/// <summary>
/// Summary description for NameFactory.
/// </summary>

public class NameFactory {
public NameFactory() {}
public Namer getName(string name) {
int i = name.IndexOf (",");
if(i > 0)
return new LastFirst (name);
else
return new FirstFirst (name);
}
}

3、组合模式Composite

GameBox的代码:
public class GameBox
{
public void PlayGame()
{
Console.WriteLine("plaly game");
}
}

InternetBox的代码:
public class InternetBox
{
public void ConnectToInternet()
{
Console.WriteLine("connect to internet");
}
public void GetMail()
{
Console.WriteLine("check email");
}
}

XBox的代码:
public class XBox
{
private GameBox mGameBox=null;
private InternetBox mInternetBox=null;

public XBox()
{
mGameBox = new GameBox();
mInternetBox = new InternetBox();
}
public void PlayGame()
{
mGameBox.PlayGame();
}

public void ConnectToInternet()
{
mInternetBox.ConnectToInternet();
}

public void GetMail()
{
mInternetBox.GetMail();
}
}


XBox中封装了GameBox和InternetBox的方法,这样,用户面对的情况就大大的简化了,调用的代码如下:
public class CSComposite
{
static void Main (string[] args)
{
XBox x = new XBox();
Console.WriteLine("PlayGame!");
x.PlayGame();
Console.WriteLine();
Console.WriteLine("Internet Play Game!");
x.ConnectToInternet();
x.PlayGame();
Console.WriteLine();
Console.WriteLine("E-Mail!");
x.GetMail();
}
}

4、 命令模式Command

Command类是ICommand的实现,Command类实现了execute方法,其他命令类都是Command方法的子类。这样激发者接受者和接受者面临的环境就非常简单了:统一作为Command类型就可以处理了。

最简单的命令模式的实现代码如下:

///定义Command接口
public interface ICommand
{
void execute();
}

///实现ICommand接口
///Command类是所有命令的基类,在这里实现一些命令的共同处理过程
public abstract class Command : ICommand
{
public virtual void execute()
{
}
//实现其他的方法....
}

///实现一个具体的Command1
public class Command1 : Command
{
public void override execute()
{
//具体的处理过程
}
}

///实现一个具体的Command2
public class Command2 : Command
{
public void override execute()
{
//具体的处理过程
}
}

///实现一个具体的Command3
public class Command3 : Command
{
public void override execute()
{
//具体的处理过程
}
}










 

 

 

常见的23种设计模式,你知道多少?

原网址:http://sentsin.com/web/131.html 这几天一直很忙,没有时间发表帖子和对编程进行一些思考,我喜欢在写一个东西的时候或者做一件事情的时候,仔细斟酌和想清楚,...
  • sonta
  • sonta
  • 2015年03月17日 22:59
  • 1360

几种常用的设计模式介绍

几种常用的设计模式介绍 1.    设计模式的起源 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander。在1970年他的《建筑的永恒之道》里描述了投计模式的发现,因为它已经存在...
  • XSL1990
  • XSL1990
  • 2013年11月16日 18:17
  • 132030

设计模式总结之模式分类

话说软件江湖还是混沌之时,无门无派,无招无式,GoF(Gang of Four,四个大师),穷理之熟,融会贯通,合著了《Design Patterns: Elements of Reusable Ob...
  • cooldragon
  • cooldragon
  • 2016年08月11日 00:41
  • 3345

设计模式经典书籍推荐

很多朋友问学习设计模式的书籍,老大沧浪在FAQ里有个简短的叙述,这里我引申一下,说说自己看过或者翻过的设计模式书籍,由于水平所限,肯定有不对的地方,希望大家指正,如果大家看到好的模式相关书籍,希望能回...
  • a316212802
  • a316212802
  • 2016年03月23日 10:35
  • 11619

设计模式——怎么就给分成三类了呢?

大家都说设计模式可根据目的划分为: 1、创建型(creational):主要用于处理对象的创建,实例化对象 2、结构型(structural):处理类或对象间的组合 3、行为型(behavior...
  • Daybreak1209
  • Daybreak1209
  • 2014年03月24日 20:49
  • 2016

设计模式的三种类型

设计模式分为三种类型,共23类。 一、创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 二、结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模...
  • cyjch
  • cyjch
  • 2016年05月26日 13:29
  • 2454

五种常见设计模式

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”)。所...
  • it_users
  • it_users
  • 2017年01月22日 22:37
  • 5040

Android设计模式之23种设计模式一览

Android设计模式之23种设计模式一览 一  什么是设计模式? (1)基本定义:设计模式(Design pattern)是一套被反复使用的代码设计经验的总结。使用设计模式的目的是为了可重用代码...
  • happy_horse
  • happy_horse
  • 2016年03月16日 21:03
  • 14295

设计模式与重构是一种追求

1         设计模式与重构是一种追求 当一个软件工程师(DEV)一开始编码的时候,因为技术的缺乏,追求的必当是完成任务(Coding)。 随着时间的发展,DEV已经能够完成任务之后。也便开始追...
  • sunyaqing2008
  • sunyaqing2008
  • 2016年04月05日 12:06
  • 530

常见设计模式快速记忆

记忆口决: 抽工建原单 代桥组装享适门 观模策状备 迭访中命解职 第一行为创建型模式。第二行为结构型模式。第三行为行为模式。    想象如下的场景:大家都在抽出工夫来建造原单。原单...
  • kingmax54212008
  • kingmax54212008
  • 2015年10月28日 11:16
  • 885
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式
举报原因:
原因补充:

(最多只允许输入30个字)