设计模式-创建模式-简单工厂模式
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在工厂类中执行。
缺点: 假如我们需要增加一个角色类 医生。则需要修改工厂类中的代码在其switch case中增加医生代码。同时在枚举类型中增加医生枚举。所以我们还需要进一步抽象,将会在后面的系列中通过抽象工厂模式来解决
思路:
第一步、抽象出共有的接口 。本例中抽象出人具备的两个接口 ,自我介绍方法,和工作方法。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 创建模式_2.简单工厂模式.接口{ public interface Person { void ToIntroduceMyself();//给接口定义自我介绍的方法,但是不用写具体实现 void ToWork(); //工作方法 接口里的方法不能用public private 等修饰符 }}View Code
第二步、编写具体的实例类。让他继承抽象出的接口。以 教师为例。如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using 创建模式_2.简单工厂模式.接口;namespace 创建模式_2.简单工厂模式.角色类{ class Teacher:Person { public void ToIntroduceMyself() { Console.WriteLine("大家好!我是一名老师!"); } public void ToWork() { Console.WriteLine("我正在上课!"); } }}View Code
第三步、编写一个工厂类。他的作用是用来实现对对象类的初始化。这样他作为一个中间层,将调用者与实例化对象隔开,实现了解耦。调用者不用关心具体的实例方法,只需要将参数传递给工厂类即可,由工厂类负责实例化出对象。
代码如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using 创建模式_2.简单工厂模式.接口;using 创建模式_2.简单工厂模式.角色类;namespace 创建模式_2.简单工厂模式.工厂类{ class PersonFactory //角色工厂 { public static Person toCreatePerson(Professional 职业) { if (职业 ==Professional.Teacher) { return new Teacher(); } if (职业 == Professional.Student) { return new Student(); } else { return new Lawyer(); } } } //定义一个枚举职业类型 public enum Professional { Student, Teacher, Lawyer, }}View Code
从这一点我们可以看出,如果此时我们再需要增加一个医生职业的类,则需要修改工厂类和职业枚举类中的代码,所以简单工厂模式在对象类型不变的情况下适合使用,在对象类型变化的情况下就表现出了他的缺陷。
第四步、调用工厂类实现实例化对象
using System;using System.Collections.Generic;using System.Linq;using System.Text;using 创建模式_2.简单工厂模式.接口;using 创建模式_2.简单工厂模式.工厂类;namespace 创建模式_2.简单工厂模式{class Program { static void Main(string[] args) { Person person = PersonFactory.toCreatePerson(Professional.Student); person.ToIntroduceMyself(); person.ToWork(); Person person1 = PersonFactory.toCreatePerson(Professional.Teacher); person1.ToIntroduceMyself(); person1.ToWork(); Console.ReadLine(); } }View Code
一例读懂设计模式之亚马逊旺季如何快速爆单?Listing优化&PPC实战、 心怡科技、 即学即用的亚马逊产品发布、 沃尔玛、 9个顶级的亚马逊FBA卖家产品销量估算工具!、 亚马逊卖家如何爆单?跨境精细化运营攻略必看!、 如何通过亚马逊-SKU商品排序来提高店铺转化率、 最全解答:亚马逊产品促销有必要做吗?该怎么做?、
没有评论:
发表评论