极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

news/2024/11/6 14:48:05/

四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client) 

        抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。

        具体产品(Concrete Product):需要创建的具体对象。

        工厂(Creator):内部逻辑可以控制生成目标对象。

        客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。

 实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。

类图: 

应用场景:苹果公司的工厂生产iphone 4、ipad 2、ipod nano 6。

分析:这里多种产品都可以运行,所以有一个公共方法,然后抽象为父类。

        下面我们在控制台程序去演示一下如何使用Simple Factory Pattern:

        一、抽象产品(Product):

 

 
  1. //抽象产品(Product) 
  2. abstract class Apple 
  3.     public abstract void Run(); 

        二、具体产品(Concrete Product):

 

 
  1. //具体产品(Concrete Product) 
  2. class Iphone : Apple 
  3.     public override void Run() 
  4.     { 
  5.         Console.WriteLine("iphone 4 开始运行!"); 
  6.     } 
  7.  
  8. //具体产品(Concrete Product) 
  9. class Ipad : Apple 
  10.     public override void Run() 
  11.     { 
  12.         Console.WriteLine("ipad 2 开始运行!"); 
  13.     } 
  14.  
  15. //具体产品(Concrete Product) 
  16. class IpodNano : Apple 
  17.     public override void Run() 
  18.     { 
  19.         Console.WriteLine("ipod Nano 6 开始运行!"); 
  20.     } 

        三、工厂(Creator):

 

 
  1. //工厂(Creator) 
  2. class AppleFactory 
  3.     public Apple CreateApple(string productName) 
  4.     { 
  5.         switch (productName.ToUpper()) 
  6.         {  
  7.             case "IPHONE"
  8.                 return new Iphone(); 
  9.             case "IPAD"
  10.                 return new Ipad(); 
  11.             case "IPODNANO"
  12.                 return new IpodNano(); 
  13.             default
  14.                 return null
  15.         } 
  16.     } 

        四、客户端(Client):

 

 
  1. //客户端(Client) 
  2. class Program 
  3.     static void Main(string[] args) 
  4.     { 
  5.         AppleFactory factory = new AppleFactory(); 
  6.         Apple iphone= factory.CreateApple("iphone"); 
  7.         iphone.Run(); 
  8.         Apple ipad = factory.CreateApple("ipad"); 
  9.         ipad.Run(); 
  10.         Apple ipodnano = factory.CreateApple("ipodnano"); 
  11.         ipodnano.Run(); 
  12.         Console.ReadLine(); 
  13.     } 

       如需源码请点击 SimpleFactoryPattern.rar 下载。



本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827088


http://www.ppmy.cn/news/350647.html

相关文章

文本编辑器GNU Nano 6.0 发布

自 1999 年末发布以来,GNU Nano 为基于终端的文本编辑器的易用性设定了新标准,从那时起,它已经发布了大量版本,其中最新的是全新的 6.0 版本。 虽然不一定是功能最丰富的版本,但它确实有一些关键的改进。让我们来看看其…

Windows软件:如何安装ideaIU-2020.3.3并使用无限重置插件达到永久使用

​前言: ​在我们做SpringBoot Java项目时,一个好的开发工具可以让我们的效率达到事半功倍,早期的eclipse已经无法满足我们日常需求,当然idea集成开发工具在很早前就已经进入市场,如今取得了无法撼动的地位&#xff0c…

Oracle中xmltype类型toObject函数用法实例

Oracle中xmltype类型toObject函数用法总结。 用法总结 xmltype是oracle中的type object类型。在实际使用中,可以当做xml对象来使用: set serveroutput ondrop type person_typex; create type person_typex is object (name varchar2(32),age number …

【redis-初级】redis安装

文章目录 1.非关系型数据库(NoSQL)2.在Linux上安装redis2.1 安装前准备2.2 安装2.3 启动2.4 关闭 3. redis客户端3.1 命令客户端3.2redis远程客户端3.3 redis编程客户端 1.非关系型数据库(NoSQL) 2.在Linux上安装redis 2.1 安装前…

背光补偿

背光补偿能提供在非常强的背景光线前面目标的理想的曝光,无论主要的目标移到中间、上下左右或者荧幕的任一位置。 背光补偿也称作逆光补偿或逆光补正,它可以有效补偿摄像机在逆光环境下拍摄时画面主体黑暗的缺陷。 当摄像机处于逆光环境中拍摄时&#…

boe背光驱动linux,[技术资料]Local Dimming LED TV 背光驱动整体方案

目前,液晶电视的使用越来越广泛,在人们的日常生活中占据越来越重要的位置,而其消耗的能量也越来越引起人们的关注。因此,各个电视、液晶厂商都投入极大的物力、人力、财力加大研发力量去降低功耗,从技术发展趋势上来说…

LCD背光控制芯片

PWM信号可通过调整占空比来调节输出电压,可以使用PWM来控制LCD的背光。 但CPU的pwm引脚驱动能力太弱,常外接一个背光芯片。rt9293就是这样的一个恒流升压转换器。 IledVref/Rset VfbDuty * 300mV (Duty是EN输入信号的占空比,300mV是内部参考电…

反射式液晶屏为什么在市面上很少见到了?

液晶屏随处可见,经过多年的发展,现在的显示技术已经非常成熟。 然而,液晶屏的发展也并非一帆风顺。 今天我们就来看看曾经火热的反射式液晶屏的兴衰。 目前我们常见的液晶屏本身是不发光的。 之所以能看到成像,是因为在液晶屏面板…