个人理解:
装饰模式的精髓在于装饰基类定义了一个装饰类基类类型的字段。
UML类图

代码实现:
using System;
namespace DecoratorMode
{
class Program
{
static void Main(string[] args)
{
Hero hero = new Hero();
KillLion killLion1 = new KillLion();
KillSteven killSteven1 = new KillSteven();
KillLion killLion2 = new KillLion();
KillSteven killSteven2 = new KillSteven();
killLion1.AddKillRecord(hero);
killSteven1.AddKillRecord(killLion1);
killSteven2.AddKillRecord(killSteven1);
killLion2.AddKillRecord(killSteven2);
killLion2.ShowRecord();
}
}
public class Hero
{
public virtual void ShowRecord()
{
Console.WriteLine("心灵捕手随机选择了猴子...");
}
}
public class KillBase : Hero
{
protected Hero currentHero;
public void AddKillRecord(Hero hero)
{
this.currentHero = hero;
}
public override void ShowRecord()
{
if (currentHero != null)
currentHero.ShowRecord();
}
}
public class KillLion : KillBase
{
public override void ShowRecord()
{
this.currentHero.ShowRecord();
Console.WriteLine("莱恩被心灵捕手的猴子给击杀了...");
}
}
public class KillSteven : KillBase
{
public override void ShowRecord()
{
this.currentHero.ShowRecord();
Console.WriteLine("Steven被心灵捕手的猴子给击杀了...");
}
}
}
装饰类的Python实现代码:
class BaseLogger:
Info=""
Error=""
Warning=""
def WriteLog(self):
raise NotImplementedError("Abstract")
'''装饰模式的精髓在于装饰基类定义了一个装饰类基类类型的字段。'''
class Logger(BaseLogger):
__logger=None
def SetLogger(self, logger):
self.__logger=logger
def WriteLog(self):
if(self.__logger!=None):
self.__logger.WriteLog()
if(self.Info!=""):
print(self.Info)
elif(self.Error!=""):
print(self.Error)
elif(self.Warning!=""):
print(self.Warning)
else:
pass
class SystemALogger(Logger):
pass
class SystemBLogger(Logger):
pass
systemALogger1=SystemALogger()
systemBLogger1=SystemBLogger()
systemALogger1.Info="Current is running in System A."
systemALogger2=SystemALogger()
systemALogger2.SetLogger(systemALogger1)
systemALogger2.Error="System A crashed."
systemBLogger1.SetLogger(systemALogger2)
systemBLogger1.Info="Current is running in System B."
systemBLogger1.WriteLog()
737

被折叠的 条评论
为什么被折叠?



