专业课《软件设计模式》学了好几周,完全还没进入状态,还停留在上半学期的php中。这几天温习了下c#,准备好好自学下软件设计模式,不然期末要挂呀。
Day one: 简单工厂模式
类图:
以上内容摘抄于百度百科对于简单工厂模式的介绍,但每次看到这些介绍,那可是个头痛啊,结合书本以及网上资料自己简单总结了一下:
优点:简单工厂模式将对象的创建和对象本身的处理分离开来,降低了系统的耦合度,便于修改;
在有所需求时,只需传入正确的参数,通过工厂类实例化出合适的对象
缺点:违反高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中,它所创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类。
实例:简单电视机工厂
某电视机厂专为各知名电视机品牌代工生产各类电视机,当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌的电视机。现使用简单工厂模式来模拟该电视机工厂的生产过程。
抽象产品类TV
包含了所有产品都具有的业务方法play()
public class TV
{
public virtual void play()
{
}
}
具体产品类 HaierTV
继承于TV是抽象产品TV的子类,实现了TV中的业务方法play()
class HaierTV :TV
{
public override void play()
{
Console.WriteLine("HaierTV playing--");
}
}
具体产品类 HisenseTV
继承于TV是抽象产品TV的子类,实现了TV中的业务方法play(),不同的具体产品,play()方法不同
class HisenseTV : TV
{
public override void play()
{
Console.WriteLine("HisenseTV playing--");
}
}
工厂类TVFcatory
工厂类,整个产品的核心,提供了静态工厂方法produceTV(),根据参数值得不同实例化具体产品,返回相应对象。
public class TVFactory
{
public static TV produceTV(String brand)
{
TV tv = null;
if (brand == "Haier")
{
Console.WriteLine("电视机工厂生产海尔电视机!");
tv = new HaierTV();
}
else if (brand == "Hissense")
{
Console.WriteLine("电视机工厂生产海信电视机!");
tv = new HisenseTV();
}
else
{
throw new ArgumentOutOfRangeException("暂不能生产该品牌电视机!");
}
return tv;
}
}
客户端代码
class Program
{
static void Main(string[] args)
{
TV tv1;
tv1 = TVFactory.produceTV("Haier");
tv1.play();
Console.ReadKey();
}
}
总结:对面向对象的特性,有了进一步的了解。但还是不能够很熟练的运用,需要更多地总结、熟悉吧。每天熟悉一个模式,在期末考试之前做到熟练掌握!加油啊!考试月,各个课程都要上心,将压力转化为动力。Go Go Go!
2016.12.12