创建型设计模式之工厂模式

结构           
意图         提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性    
  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

  1 using System;
  2
  3     // These classes could be part of a framework,
  4     // which we will call DP
  5     // ===========================================
  6
  7     abstract class DPDocument
  8     {
  9         abstract public void Dump();
 10     }
 11
 12     abstract class DPWorkspace
 13     {
 14         abstract public void Dump();
 15     }
 16
 17     abstract class DPView
 18     {
 19         abstract public void Dump();
 20     }
 21
 22     abstract class DPFactory
 23     {
 24         abstract public DPDocument CreateDocument();
 25         abstract public DPView CreateView();
 26         abstract public DPWorkspace CreateWorkspace();
 27     }
 28
 29     abstract class DPApplication
 30     {
 31         protected DPDocument doc;
 32         protected DPWorkspace workspace;
 33         protected DPView view;
 34
 35         public void ConstructObjects(DPFactory factory)
 36         {
 37             // Create objects as needed
 38             doc = factory.CreateDocument();
 39             workspace = factory.CreateWorkspace();
 40             view = factory.CreateView();
 41         }
 42
 43         abstract public void Dump();
 44
 45         public void DumpState()
 46         {
 47             if (doc != null) doc.Dump();
 48             if (workspace != null) workspace.Dump();
 49             if (view != null) view.Dump();
 50         }
 51     }
 52
 53     // These classes could be part of an application
 54     class MyApplication : DPApplication
 55     {
 56         MyFactory myFactory = new MyFactory();
 57
 58         override public void Dump()
 59         {
 60             Console.WriteLine("MyApplication exists");
 61         }
 62
 63         public void CreateFamily()
 64         {
 65             MyFactory myFactory = new MyFactory();
 66             ConstructObjects(myFactory);
 67         }
 68     }
 69
 70     class MyDocument : DPDocument
 71     {
 72         public MyDocument()
 73         {
 74                 Console.WriteLine("in MyDocument constructor");
 75         }
 76
 77         override public void Dump()
 78         {
 79             Console.WriteLine("MyDocument exists");
 80         }
 81     }
 82
 83     class MyWorkspace : DPWorkspace
 84     {
 85         override public void Dump()
 86         {
 87             Console.WriteLine("MyWorkspace exists");
 88         }
 89     }
 90
 91     class MyView : DPView
 92     {
 93         override public void Dump()
 94         {
 95             Console.WriteLine("MyView exists");
 96         }
 97     }
 98
 99     class MyFactory : DPFactory
100     {
101         override public DPDocument CreateDocument()
102         {
103             return new MyDocument();
104         }
105         override public DPWorkspace CreateWorkspace()
106         {
107             return new MyWorkspace();
108         }
109         override public DPView CreateView()
110         {
111             return new MyView();
112         }
113     }
114
115     /// <summary>
116     ///    Summary description for Client.
117     /// </summary>
118     public class Client
119     {
120         public static int Main(string[] args)
121         {
122             MyApplication myApplication = new MyApplication();
123
124             myApplication.CreateFamily();
125
126             myApplication.DumpState();
127
128             return 0;
129         }
130     }

工厂模式

时间: 2024-10-13 11:01:11

创建型设计模式之工厂模式的相关文章

创建型设计模式(工厂模式)

在工厂模式中,我们创建对象而不将创建逻辑暴露给客户端. 首先,我们设计一个接口来表示Shape. public interface Shape { void draw(); } 然后我们创建实现接口的具体类. public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } public

java语言实现创建型设计模式—抽象工厂模式

一.描述 抽象工厂模式是在工厂方法的模式上进一步抽象而来,如果说工厂方法模式是对一个产品结构的创建而言的话,那么抽象工厂模式则是针对多个产品结构而言的,它被用来一次创建多个不同的产品对象. 我们要创建一个摩托车轮胎和摩托车把手,又要创建一个自行车轮胎和自行车把手,如果我们使用工厂方法模式的话我们需要四个类:创建摩托车轮胎的工厂类,创建摩托车把手的工厂类,创建自行车轮胎的工厂类和创建自行车把手的工厂类,但是如果我们使用抽象工厂方法的话,我们需要创建两个工厂类:创建摩托车轮胎和把手的工厂类,创建自行

&quot;围观&quot;设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式的核心思想在我认为是将类创建的权利授予给工厂类,其他的类不允许创建,授予了权限的类创建好之后,需要某些的对象的时候,可以去工厂当中去取.也就是像一个工厂一样,用的人不需要关心对象怎么来的,你只需要关心怎么用就好了.工厂模式细分为三种,简单工厂.工厂方法.抽象工厂三种模式.这三种模式比较相似,往往会引发混淆,本文主要结合实际的例子去进行区分.理清三者之间的关系与适用范围. 概述 简单工厂 对于简单工厂,我个人的理解是,直接实现一个方法,要生产什么由这个方法以及传入的参数来决定. 工厂方法

创建型设计模式 之 原型模式

同为创建型模式的原型模式与单例模式是密不可分的,这也是最常用的设计模式之一. 原型模式是一种非常简单的设计模式.这里除了基本介绍和演示,还详细介绍了Java中原型模式的本质. 一.介绍 同样,先来看一下<研磨设计模式>的定义——用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式的本质——克隆生成对象. 那么原型模式是什么意思呢?说白了就是克隆自身.我们知道Java中没有引用这个概念,Java用变量名代表引用.像 Apple a = new Apple();我们知道,想要操

java-设计模式(创建型)-【工厂模式】

1.FactoryMode(工厂模式) 定义:提供创建对象的接口,方便对象的创建. 2.静态工厂方法模式(Static Factory Method Mode) 定义:对于对象的创建,交给工厂类内部的静态方法实现. 使用场景:适用于基类的子类较少时,且基本不会再增加子类时. 坏处,当子类增加时,需要修改工厂类的内部,违背了开闭原则. 基类与子类: public interface Sender { void send (); } class SenderMail implements Sende

PYTHON设计模式,创建型之简单工厂模式

这个系统,感觉思路清爽,,相信多练练,多思考,就会熟悉的.. http://www.jianshu.com/p/2450b785c329 #!/usr/bin/evn python #coding:utf8 class Pizza(object): def prepare(self, type): print 'prepare {type} pizza'.format(type=type) def bake(self, type): print 'bake {type} pizza'.forma

创建型设计模式之原型模式(Prototype)

结构   意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或者 当一个类的实例只能有几个不同状态组合中的一种时.建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些. 1 using System; 2 3 // Objects which are to work as prototypes must be based on class

创建型设计模式 之 建造者模式

一.介绍 生成器模式是什么呢? <研磨设计模式中>给了这样的定义:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表示. 生成器模式的本质——分离整体构建算法和部件构造. 其实,生成器模式的目的,便是为了构建复杂的产品,将构建算法和构造实现分离出来,以便系统可以更好的优化.扩展. 理解生成器模式主要是理解生成器2个部件,一个是生成器(Builder),一个是指导者(Director).生成器指的是整个复杂对象的构建过程.构建算法.而指导者指的是对生成器所生成的部件对象的构造

&quot;围观&quot;设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概