面向对象编程思想-简单工厂模式

一、引言

简单工厂、工厂方法、抽象工厂模式都属于设计模式中的创建型设计模式,它们帮助我们把对象的实例化部分抽取出来,进而优化系统架构,提高系统的扩展性。本文介绍一个比较容易理解的模式-简单工厂模式。

二、简单工厂模式

定义:“工厂”?!看到这个词语,在现实生活中大家会想到是生产产品的,同样,在简单工厂模式里大家可以理解为工厂其实就是创建对象的一个类。平时我们编程的时候,当使用“new”创建对象时,此类就增加了对该对象的依赖,它们之间的耦合度就增加了,这样当业务需求变化时,我们就不得不去修改此类的源码。在程序设计中,我们可以用“封装改变”的原则,把对象的创建部分抽取出来,去解决此类对该对象的依赖问题。这就用到“简单工厂模式”。下面通过一个例子,帮助理解简单工厂模式

在现实生活中,我们都会开着车去上班,比如周一开奔驰去上班,周二想开宝马去上班,可是我们车库里没有宝马怎么办???这时,其实办法还是有的,我们可以通过滴滴打车,叫一辆专车宝马载着我们去上班,这样我们就解决了我们没有宝马的问题,直接消费产品就可以了,不需要关注买车的问题。

下面是代码demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{    //奔驰类
    class MBZ : BaseCar
    {
        public override void Run()
        {
            Console.WriteLine("我今天开{0}去上班", this.GetType().Name);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{    //宝马类
    class BMW : BaseCar
    {
        public override void Run()
        {
            Console.WriteLine("我今天开{0}去上班", this.GetType().Name);
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{  //车子抽象类
    public abstract class BaseCar
    {    //我今天开什么类型的车去上班
        public abstract void Run();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{  //简单工厂类 负责提供车,即车工厂相当于滴滴打车的平台,传入类型相当于你叫的什么类型的车
    class CarFactory
    {
        public static BaseCar GetCar(CarType cartype)
        {
            BaseCar car = null;
            switch (cartype)
            {
                case CarType.MBZ:
                    car = new MBZ();
                    break;
                case CarType.BMW:
                    car = new BMW();
                    break;
                default:
                    throw new Exception(string.Format("暂时不提供{0}", cartype));
            }
            return car;

        }

        public enum CarType
        {
            MBZ,
            BMW
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{   //我们相当于客户端,负责调用简单工厂生产对象
    class Program
    {
        static void Main(string[] args)
        {
            BaseCar bmw = CarFactory.GetCar(CarFactory.CarType.BMW);
            BaseCar mbz = CarFactory.GetCar(CarFactory.CarType.MBZ);
            bmw.Run();
            mbz.Run();
            Console.Read();
        }
    }
}

优点:比起平时的直接“new”生产对象

1.简单工厂解决了客户端与对象的直接依赖,消除客户端直接创建对象责任,实现客户端只需要关注消费产品就可以了,实现责任的分割。

2.代码复用性增高,这样不仅我打车时不需要关注车库中有没有想坐的车,其他人一样也可以直接消费产品就可以了,把创建车的事情交给了滴滴打车。

缺点:

1.工厂类集中了所有产品的创建,职责过重,工厂类如果不能运行了,整个系统都会受到影响。

2.不利于代码扩展,一旦增加新的消费产品,就需要修改工厂类,工厂类会越来越复杂。

适用场景:工厂类创建对象较少时;客户知道传入工厂参数,不需要关注对象创建逻辑时。

关于简单工厂模式的学习就到此结束了,哇,已经这么晚了,写博客真的很重要,这个可能只有做了得人才知道,需要锻炼一个人的语言组织能力,执行力,对知识的掌握扎实度的考验等等。本文是笔者对知识的巩固,当然也希望能帮到他人,若有不足地方,欢迎斧正,感谢您的阅读。

参考:http://www.cnblogs.com/zhili/p/SimpleFactory.html

时间: 2024-08-03 10:41:52

面向对象编程思想-简单工厂模式的相关文章

C#面向对象设计之——简单工厂模式(二)

一.前言 简单工厂是一个负责生产对象的中间类,例如有加减乘除四个运算方法,它们继承父类,并重写父类的方法,简单工厂根据不同的运算符创建不同的实例对象赋值给父类,实现了面向对象的另一个原则——降低对象之间的耦合度.简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品.简单工厂模式实现了对责任的分割. 简单工厂模式的缺点: 工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都会受到影响 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,这样就会造

PHP面向对象-设计模式 单例模式 简单工厂模式 工厂方法模式

1.单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. 要实现每一个类只有一个实例,就需要对实例化进行限制. 单例模式实现要点: ① 构造函数私有化,不允许使用new关键字创建对象  ② 对外提供获取对象的方法.在方法中判断对象是否为空,如果为空则创建对象并返回,如果不为空则直接返回  ③ 实例对象的属性以及获取对象的方法必须是静态的  ④ 之后,创建对象只能使用我们提供的静态方法. 

编程思想┊从实例谈面向对象编程(OOP)、工厂模式和重构

有了翅膀才能飞,欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光,让僵冷的翅膀重新飞起来.结合实例,通过应用OOP.设计模式和重构,你会看到代码是怎样一步一步复活的. 为了更好的理解设计思想,实例尽可能简单化.但随着需求的增加,程序将越来越复杂.此时就有修改设计的必要,重构和设计模式就可以派上用场了.最后当设计渐趋完美后,你会发现,即使需求不断增加,你也可以神清气闲,不用为代码设计而烦恼了. 假定我们要设计一个媒体播放器.该媒体播放器目前只支持音频

面向对象编程思想-中介者模式

一.引言 前两天休息日在网上打QQ斗地主,每盘结束后腾讯游戏平台会自动计算输赢的欢乐豆,嗯?挺好的,平时在面对面玩斗地主时,一盘游戏结束后,我们需要了解每个人的出牌状况,然后算出来输赢.现在有了游戏平台,玩家之间计算输赢这个操作交给了游戏平台,我们不再需要了解每个人的出牌状况.在软件设计中,我们将解决这种业务场景的模式称之为中介者模式 二.中介者模式 定义:用一个中介对象来封装一系列对象的交互.中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且独立改变它们之间的交互. 下面是中介者模式结

简单工厂模式 - 学习笔记

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性. 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口.工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类

(转)php简单工厂模式实例讲解

简单工厂模式:①抽象基类:类中定义抽象一些方法,用以在子类中实现②继承自抽象基类的子类:实现基类中的抽象方法③工厂类:用以实例化对象 看完文章再回头来看下这张图,效果会比较好 采用封装方式 <?php class Calc{ /** * 计算结果 * * @param int|float $num1 * @param int|float $num2 * @param string $operator * @return int|float */ public function calculate

易学设计模式看书笔记(2) - 简单工厂模式

本文摘自易学设计模式一书 一.简单工厂模式 1.动物管理系统的例子 public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public class D

(二)设计模式之PHP项目应用(简单工厂模式:计算器)

1 简单工厂模式简介 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 2 模式组成 1)工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象. 2)抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口. 3)具体产品(Concrete Product)角色 是简单工厂模式的创建目标,所

面向对象之简单工厂模式

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Interface { class InterfaceTest { static void Main(string[] args) { #region 测试Cat,Monkey,Bear类 introduction test; for (int i = 1; i<=3; i++) { switch (i)