第一个设计模式:简单工厂
UML示意图:<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"> </v:shapetype>
<v:shapetype path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 197.25pt; HEIGHT: 134.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape>
组成部分
1. 工厂类:产生产品的加工厂
2. 抽象产品:是具体产品的抽象,可以是interface和abstract
3. 具体产品:一个个实实在在的产品
说明:用户多工厂类产生并返回一个产品供用户使用
<o:p> </o:p>
代码例子:
1. 工厂类<o:p></o:p>
/*
* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>
*/
package simplefactory;
/**
* @author Administrator
*/
public class Factory {
public static IProduct getInstance(int i) throws Exception{
IProduct product = null;
switch(i){
case 1:product = new Product1();break;
case 2:product = new Product2();break;
default:throw new Exception("无此对象!");
}
return product;
}
}
2. 抽象产品接口<o:p></o:p>
/*
* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>
*/
package simplefactory;
<o:p> </o:p>
/**
* @author Administrator
*/
public interface IProduct {
//抽象产品
boolean login();
}
3. 具体产品1<o:p></o:p>
/*
* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>
*/
package simplefactory;
<o:p> </o:p>
/**
* @author Administrator
*/
public class Product1 implements IProduct {
<o:p> </o:p>
/* (non-Javadoc)
* @see simplefactory.IProduct#login()
*/
public boolean login() {
//code is here
System.out.println("产品1的商业方法,login...");
return true;
}
}
具体产品2<o:p></o:p>
/*
* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>
*/
package simplefactory;
<o:p> </o:p>
/**
* @author Administrator
*/
public class Product2 implements IProduct{
<o:p> </o:p>
/* (non-Javadoc)
* @see simplefactory.IProduct#login()
*/
public boolean login() {
// TODO Auto-generated method stub
System.out.println("产品2的商业方法,login...");
return false;
}
}
4. 使用<o:p></o:p>
/*
* Created on <st1:chsdate isrocdate="False" w:st="on" year="2006" day="25" islunardate="False" month="11">2006-11-25</st1:chsdate>
*/
package simplefactory;
<o:p> </o:p>
<o:p> </o:p>
/**
* @author Administrator
*/
public class <st1:place w:st="on">Main</st1:place> {
<o:p> </o:p>
public static void main(String[] args) {
try {
IProduct product = Factory.getInstance(1);
product.login();//产品1
product = Factory.getInstance(2);
product.login();//产品2
product = Factory.getInstance(3);//没有这个产品,所以得到异常
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5. 输出结果<o:p></o:p>
产品1的商业方法,login...<o:p></o:p>
产品2的商业方法,login...<o:p></o:p>
java.lang.Exception: 无此对象!<o:p></o:p>
at simplefactory.Factory.getInstance(Factory.java:17)<o:p></o:p>
at simplefactory.Main.main(Main.java:19)<o:p></o:p>
优点:客户端可以动态的创建并得到一个对象,使责任得到了分工。
缺点:工厂类是简单工厂模式的核心,创建并返回静态已知的对象。这样对于扩展性来说是一个阻碍。比如有新的产品加入,则只有在工厂类中加入代码。这违背了开-闭原则。
作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552
分享到:
相关推荐
**简单工厂模式**是软件设计模式中的一种基础模式,它属于创建型模式,主要用于简化对象的创建过程。在简单工厂模式中,一个专门的工厂类负责创建对象,客户端通过调用工厂类的方法来获取所需的对象,而无需关心具体...
在这个“设计模式(简单工厂模式_排序)手写代码.rar”压缩包中,我们可以期待看到作者针对简单工厂模式和排序算法的实现。简单工厂模式通常用于创建相似类型的对象,而排序则可能涉及到多种不同的算法,如冒泡排序、...
简单工厂模式是一种创建型设计模式,它提供一个工厂类来负责创建对象,而不是让客户端代码直接创建。这样,客户端可以避免知道具体类的细节,只需调用工厂方法即可获取所需对象。 - 工厂类:包含一个或多个用于...
简单工厂模式是软件设计模式中的一种基础构造,它属于创建型模式,主要用来解决对象的创建问题,使得代码更加简洁、易读,并且易于维护。在这个主题中,我们将深入探讨简单工厂模式的基本概念、实现方式以及它在实际...
第一讲:简单工厂模式 第二讲:工厂方法模式 第三讲:抽象工厂模式 第四讲:工厂模式在开发中的运用 第五讲:单例模式 第六讲:原型模式 第七讲:建造者模式 第八讲:装饰模式 第九讲:策略模式 第十讲:...
工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪个类。这使得系统可以在不指定具体类的情况下引用抽象。在Java中,工厂模式可以通过定义一个工厂接口和多个实现了该接口的具体...
本书旨在向读者展示如何利用C# 2.0语法有效地实现和应用设计模式,使其不仅仅局限于简单的例子,而是能够在实际工程项目中发挥重要作用。全书分为七个部分,涵盖了设计模式的基本介绍、创建型模式、结构型模式、行为...
1. 简单工厂模式:提供一个创建对象实例的功能,而无须关心其具体实现。 2. 外观模式:为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 3. 适配器...
以下是这16个设计模式的概述,以及它们在实际开发中的应用和重要性。 1. 单例模式:确保一个类只有一个实例,并提供全局访问点。在PHP中,常用于数据库连接或缓存管理,避免多次实例化导致的资源浪费。 2. 工厂...
1. **简单工厂模式**:这是一种创建型设计模式,它提供了一个静态方法来创建对象,而无需暴露实例化逻辑。简单工厂模式适用于对象创建相对固定且不需经常修改的情况。工厂类负责创建对象,客户端通过调用工厂的静态...
工厂模式是其中最基础且常用的一种,它属于创建型设计模式,主要用于封装对象的创建过程,使得客户端代码无需关心具体的对象创建逻辑,而是通过一个公共接口来获取所需对象。Headfirst系列书籍以其独特的教学方式,...
Java设计模式是软件开发中的重要概念,它们是解决常见...这个压缩包资料“[浪曦原创]JAVA设计模式 第2讲 单态模式和简单工厂模式(jzkangta)”应包含了详细的讲解和示例代码,可以帮助深入理解和应用这两种设计模式。
完成了,但感觉这也没啥特别的,程序界面黑布隆冬的,内部结构也是最最平常的面向对象,于是我应用了《大话设计模式》这本书中的第一个模式——简单工厂模式,看上去还不错。界面的话,也就是输出的语句变了,system...
饿汉式在类加载时就完成了对象的初始化,懒汉式则是在第一次调用获取实例的方法时才创建对象。饿汉式简单且线程安全,但可能导致资源浪费;懒汉式节省资源但需要处理多线程环境下的同步问题,可以通过双重校验锁来...
以“first”为例,这可能是示例中的第一个工厂模式实现,可能包括以下几个方面: - 定义一个抽象的产品接口或抽象类,例如`Product`,它定义了产品的公共行为。 - 创建具体的产品类,如`ConcreteProductA`和`...
工厂方法模式是一种常用的设计模式,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。这种模式的主要作用是将对象的实例化延迟到子类,使得系统更加灵活和...
简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式使代码能够将实例化过程封装起来,使得客户端代码无需知道具体的产品类名,只需要知道产品类型即可。在C#中...
简单工厂设计模式是这些模式中的一种基础模式,常用于创建对象时,特别是当系统需要根据某些条件动态决定创建哪种类型的实例时。 简单工厂模式的核心思想是通过一个公共的工厂类来负责对象的创建,而不是让客户端...
这份“设计模式PPT”由教师宋艳在大四第一学期作为课程材料使用,旨在帮助学生理解和掌握设计模式在实际编程中的应用。 设计模式分为三大类:创建型、结构型和行为型。每种类型包含多种具体的模式,让我们逐一探讨...