为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

简单工厂模式

2017-09-02 6页 doc 17KB 14阅读

用户头像

is_153723

暂无简介

举报
简单工厂模式简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色(如下图): 工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 具体产品角色:工厂方法模式所创建的任何对 象都是这个角色的实例,由具体类实现。 简单工厂模式优缺点: 模式...
简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色(如下图): 工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 具体产品角色:工厂方法模式所创建的任何对 象都是这个角色的实例,由具体类实现。 简单工厂模式优缺点: 模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。 以园丁种植水果为例讨论该模式的具体实现: Fruit 水果接口,规定水果具有的一些共同特性 Apple 苹果类 派生自Fruit接口 Strawberry 草莓类 派生自Fruit接口 FruitGardener 园丁类 负责草莓与苹果的创建工作。 当Client要创建水果(苹果或草莓对象)的时候调用园丁类的factory方法创建:,,,图如下: 代码如下: Fruit.cs namespace Simple_Factory { public interface Fruit { //生长 void grow(); //收获 void harvest(); //种植 void plant(); } } Apple.cs namespace Simple_Factory { public class Apple:Fruit { public Apple() { } #region Fruit 成员 public void grow() { Console.WriteLine ("Apple is growing......."); } public void harvest() { Console.WriteLine ("Apple is harvesting......."); } public void plant() { Console.WriteLine ("Apple is planting......."); } #endregion } } Strawberry.cs namespace Simple_Factory { public class Strawberry:Fruit { public Strawberry() { } #region Fruit 成员 public void grow() { Console.WriteLine ("Strawberry is growing......."); } public void harvest() { Console.WriteLine ("Strawberry is harvesting......."); } public void plant() { Console.WriteLine ("Strawberry is planting......."); } #endregion } } FruitGardener.cs namespace Simple_Factory { public class FruitGardener { //静态工厂方法 public static Fruit factory(string which) { if(which.Equals ("Apple")) { return new Apple(); } else if(which.Equals ("Strawberry")) { return new Strawberry (); } else { return null; } } } } Client.cs using System; namespace Simple_Factory { class Client { [STAThread] static void Main(string[] args) { Fruit aFruit=FruitGardener.factory ("Apple");//creat apple aFruit.grow (); aFruit.harvest (); aFruit.plant(); aFruit=FruitGardener.factory ("Strawberry");//creat strawberry aFruit.grow (); aFruit.harvest (); aFruit.plant(); } } } 输出如下: Apple is growing....... Apple is harvesting....... Apple is planting....... Strawberry is growing....... Strawberry is harvesting....... Strawberry is planting.......
/
本文档为【简单工厂模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索