码迷,mamicode.com
首页 > 其他好文 > 详细

工厂模式

时间:2015-09-27 22:55:38      阅读:435      评论:0      收藏:0      [点我收藏+]

标签:

工厂模式

一:引子

话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi后他说"开奥迪车!"。你一定说:这人有病!直接说开车不就行了?! 而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是,这种有病的现象在OO语言中可以避免了。下面以Java语言为基础来引入我们本文的主题:工厂模式!!

二:作用

作用:优化项目结构,实例化类(或者接口)。

好处:将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 

三:分类

1:抽象工厂(Simple Factory)

2:工厂模式(Factory Method)

3:抽象工厂模式(Abstract Factory)

很多地方都做做出了三个工厂模式的应用环境,及使用区别分析,个人感觉大没有这个必要。毕竟三者都属于工厂模式,且在使用中框架服务于需求,需求的改变可能会使三者间相互转换。

1):抽象工厂

3.1.1):结构

 工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

 抽象产品角色(Product):简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

 具体产品角色(Concrete Product):简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

3.1.2):UML

                              技术分享

 

3.1.3):代码示例

技术分享

接口类:

技术分享
public interface ICreate
    {
        void Create();
    }
ICreate

实体类:

技术分享
public class Animal:ICreate
    {
        public void Create()
        {
            Console.WriteLine("创建动物");
        }
    }
Animal
技术分享
 public class People:ICreate
    {
        public void Create() {
            Console.WriteLine("创建人类");
        }
    }
People

工厂类:

技术分享
 public class CreateFactory
    {
        public static ICreate GeneratorCreate(string createName) {
            switch (createName)
            { 
                case "People":
                    return new People();
                case "Animal":
                    return new Animal();
                default :
                    throw new NotImplementedException();
            }
        }
    }
Factory

客户端:

技术分享
public class Factory
    {
        public void dd()
        {
           var dd= CreateFactory.GeneratorCreate("People");
        }
    }
View Code

3.1.4):总结

优点:基本实现了根据参数生成实体类的作用,降低了耦合性。

缺点:所有商品来源于一个工厂,就限制了产品的多样性。例如:生成宝马的厂子,我现在想要俩奔驰,该场景就不能使用现有的简单工厂模式实现功能了。

改进:添加新的产品项的时候创建新的工厂。

 

2):抽象工厂

3.2.1):结构

 抽象工厂角色(Creator)

 具体工厂角色(Concrete Creactor)

 抽象产品角色(Product)

 具体产品角色(Concrete Product)

3.2.2):UML

技术分享

3.2.3):代码示例

技术分享

抽象工厂:

技术分享
 public interface CreateFactory
    {
        ICreate CreateObject();
    }
CreateFactory

工厂角色

技术分享
public class PeopleFactory : CreateFactory
    {
        public ICreate CreateObject()
        {
            return new People();
        }
    }
PeopleFactory

抽象产品

技术分享
 public interface ICreate
    {
        void Create();
    }
ICreate

产品角色

技术分享
 public class People:ICreate
    {
        public void Create()
        {
           
        }
    }
People

3.2.4):总结

......(明天再写)

工厂模式

标签:

原文地址:http://www.cnblogs.com/xininuo/p/4842866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!