[菜鸟教程] 设计模式

设计模式六大原则

  1. 单一职责原则:一个类只负责一项职责。
  2. 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。
  3. 依赖倒置原则:面向接口编程,不要依赖具体实现。
  4. 接口隔离原则:细化接口定义,不要让实现它的类去实现一些不关心的接口方法。
  5. 迪米特原则:一个对象应该对其他对象保持最少的了解。
  6. 开闭原则:对扩展开放,对修改关闭。


一、结构型模式
适配器模式(Adapter)
外观模式(Facade)
组合模式(Composite)
桥接模式(Bridge)

二、行为型模式(behavior)
职责链模式(Chain of Responsibility)
单体模式
观察者模式
中介者模式(Mediator)
代理模式
享元模式(Flyweight)

三、构造型模式
生成器模式(Builder)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
原型模式(Prototype)
备忘录模式

四、操作型模式
模板方法模式
状态模式
策略模式
命令模式(Command)
解释器模式

五、扩展型模式
装饰器模式
迭代器模式
访问者模式(Visitor)

总结

 

适配器模式
应用场景:解决接口不兼容

 

外观模式
应用场景:对复杂的子系统进行封装,对外提供一套更简单的接口。

 

组合模式
应用场景:对多个对象进行封装,提供统一接口。

 

桥接模式
应用场景:当一个类的功能有多个自由度时,对各自由度单独实现,再组合。
例如:
using System;
abstract class Brush
{
	protected Color c;
	
	public abstract void Paint();
	public void SetColor(Color c)
	{
		this.c = c;
	}
}
class BigBrush : Brush
{
	public override void Paint(){
		
	}
}

class SmallBrush : Brush
{
	public override void Paint(){
		
	}
}

class Color
{
	public string color;
}

class Red : Color
{
	public Red(){
		this.color = "red";
	}
}

class Green : Color
{
	public Red(){
		this.color = "green";
	}
}

class Client{
	public static void Main(){
		Brush b = new BigBrush();
		b.SetColor(new Red());
		b.Paint();
		b.SetColor(new Green());
		b.Paint();
		
		Brush b = new SmallBrush();
		b.SetColor(new Red());
		b.Paint();
		b.SetColor(new Green());
		b.Paint();
	}
}

职责链模式

abstract class Player
{
	protected Player p;
	public void SetPlayer(Player p){
		this.p = p;
	}
	
	public void Next(){
		if(null != p)
			p.Handle();
	}
	
	public abstract void Handle();
}

class Player1 : Player{
	public override void Handle(){
		//处理代码
		//...
		Next();
	}
}

class Player2 : Player{
	public override void Handle(){
		//处理代码
		//...
		Next();
	}
}

class Player3 : Player{
	public override void Handle(){
		//处理代码
		//...
		Next();
	}
}

class Client{
	public static void Main(){
		Player p1 = new Player1();
		Player p2 = new Player2();
		Player p3 = new Player3();
		p1.SetPlayer(p2);
		p2.SetPlayer(p3);
		p1.Handle();
	}
}

 

中介者模式
应用场景:当多个对象之间存在复杂的交互依赖关系时,可考虑用中介来解耦。

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号