博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之二:工厂方法模式
阅读量:4147 次
发布时间:2019-05-25

本文共 2470 字,大约阅读时间需要 8 分钟。

设计模式之二:工厂方法模式
http://www.taidous.com/thread-47813-1-1.html

(出处: 【泰斗社区】-专注互联网游戏和应用的开发者平台)

工厂方法模式(Factory Method):
    定义:Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses(定义一个用于创建对象的接口,让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类)。
   
     在工厂方法模式中,抽象类Product负责定义产品的共性,实现对事物最抽象的定义;Creator为抽象创造类
     
     优点:

     1、工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
     2、能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
            在系统中加入新产品时,完全符合开闭原则
     缺点:
     1、系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
           增加了系统的抽象性和理解难度


     使用:
     1、在所有需要生成对象的地方都可以使用,但是需要慎重地考虑是否要增加一个工厂类管理、增加代码的复杂度
     2、需要灵活的,可扩展的框架时,可以考虑工厂方法模式;
  
///     /// 菜抽象类    ///     public abstract class Food    {        // 输出点了什么菜        public abstract void Print();    }      ///     /// 西红柿炒鸡蛋这道菜    ///     public class TomatoScrambledEggs : Food    {        public override void Print()        {            Console.WriteLine("西红柿炒蛋好了!");        }    }      ///     /// 土豆肉丝这道菜    ///     public class ShreddedPorkWithPotatoes : Food    {        public override void Print()        {            Console.WriteLine("土豆肉丝好了");        }    }      ///     /// 抽象工厂类    ///     public abstract class Creator    {        // 工厂方法        public abstract Food CreateFoddFactory();    }      ///     /// 西红柿炒蛋工厂类    ///     public class TomatoScrambledEggsFactory:Creator    {        ///         /// 负责创建西红柿炒蛋这道菜        ///         /// 
public override Food CreateFoddFactory() { return new TomatoScrambledEggs(); } } /// /// 土豆肉丝工厂类 /// public class ShreddedPorkWithPotatoesFactory:Creator { /// /// 负责创建土豆肉丝这道菜 /// ///
public override Food CreateFoddFactory() { return new ShreddedPorkWithPotatoes(); } } /// /// 客户端调用 /// class Client { static void Main(string[] args) { // 初始化做菜的两个工厂() Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory(); Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory(); // 开始做西红柿炒蛋 Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory(); tomatoScrambleEggs.Print(); //开始做土豆肉丝 Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory(); shreddedPorkWithPotatoes.Print(); Console.Read(); } }

转载地址:http://bljti.baihongyu.com/

你可能感兴趣的文章
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(上)
查看>>