- 浏览: 72388 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
z169351998:
...
StringOfArray in web service proxy -
z169351998:
撒大大 [size=x-small][/size]
StringOfArray in web service proxy -
z169351998:
引用[url][/url][flash=200,2 ...
StringOfArray in web service proxy -
huhu_long:
补充1:在二叉树遍历的时候,如果采取非递归的方式,则可以借助S ...
栈的一些应用 -
huhu_long:
简单说,取第一个作为参考pivot值,while(low< ...
快速排序
产品由某一具体工厂的同一方法生产, 工厂只需被告知具体产品的类型就可以了。 适用单一系列多产品的场景。
废话少说, 上代码:
产品的抽象
具体的产品1
具体的产品2
具体的产品3
工厂的抽象
具体的工厂
客户端代码
运行结果:
废话少说, 上代码:
产品的抽象
public interface Car { void showDesc(); void start(); void showCurrentSpeed(); void stop(); }
具体的产品1
public class Benz implements Car { @Override public void showCurrentSpeed() { System.out.println("210"); } @Override public void showDesc() { System.out.println("I'm Benz"); } @Override public void start() { System.out.println("Benz started..."); } @Override public void stop() { System.out.println("Benz stoped..."); } }
具体的产品2
public class BMW implements Car { @Override public void showCurrentSpeed() { System.out.println("200"); } @Override public void showDesc() { System.out.println("I'm BMW"); } @Override public void start() { System.out.println("BMW started..."); } @Override public void stop() { System.out.println("BMW stoped..."); } }
具体的产品3
public class Audi implements Car { @Override public void showCurrentSpeed() { System.out.println("180"); } @Override public void showDesc() { System.out.println("I'm Audi"); } @Override public void start() { System.out.println("Audi started..."); } @Override public void stop() { System.out.println("Audi stoped..."); } }
工厂的抽象
public abstract class AbstractCarFactory { public abstract <T extends Car> T createCar(Class<T> c); }
具体的工厂
public class CarFactory extends AbstractCarFactory { @Override public <T extends Car> T createCar(Class<T> c) { Car car = null; try { car = (Car) Class.forName(c.getName()).newInstance(); } catch (Exception e) { // Handle exception... } return (T) car; } }
客户端代码
private static void testFactory() { AbstractCarFactory carFactory = new CarFactory(); Car audi = carFactory.createCar(Audi.class); audi.showDesc(); audi.start(); audi.showCurrentSpeed(); audi.stop(); Car bmw = carFactory.createCar(BMW.class); bmw.showDesc(); bmw.start(); bmw.showCurrentSpeed(); bmw.stop(); Car benz = carFactory.createCar(Benz.class); benz.showDesc(); benz.start(); benz.showCurrentSpeed(); benz.stop(); }
运行结果:
引用
I'm Audi
Audi started...
180
Audi stoped...
I'm BMW
BMW started...
200
BMW stoped...
I'm Benz
Benz started...
210
Benz stoped...
Audi started...
180
Audi stoped...
I'm BMW
BMW started...
200
BMW stoped...
I'm Benz
Benz started...
210
Benz stoped...
评论
2 楼
huhu_long
2011-10-17
而针对于 抽象工厂方法 则侧重在 多产品 多系列 的情况下
这样,
对于多产品 则可以形成 工厂的抽象
对于多系列 则可以形成 产品的抽象
比如产品, AbstractCarFactory - BMWFactory, AudiFactory
而对系列, AbstractCar - BMWSerial5, BMWSerial6, BMWSerial7; AudiA4, AudiA6, AudiA8.
比如:
这样的话,如果需要新加 AudiA6, AudiA4, BMWSerial6 等等只需要添加一个类就可以了。
这样,
对于多产品 则可以形成 工厂的抽象
对于多系列 则可以形成 产品的抽象
比如产品, AbstractCarFactory - BMWFactory, AudiFactory
而对系列, AbstractCar - BMWSerial5, BMWSerial6, BMWSerial7; AudiA4, AudiA6, AudiA8.
比如:
// 场景类 public static void main(String[] args) { AbstractCarFactory bmwFactory = new BMWFactory(); BMWSerial7 bmwSerial7 = bmwFactory.createCar(BMWSerial7.class); bmwSerial7.run(); AbstractCarFactory audiFactory = new AudiFactory(); AudiA8 audiA8 = audiFactory.createCar(AudiA8.class); audiA8.run(); } // 抽象工厂 public abstract class AbstractCarFactory { public abstract <T extends AbstractCar> T createCar(Class<T> c); } // BMW工厂 public class BMWFactory extends AbstractCarFactory { @Override public <AbstractBMW extends AbstractCar> AbstractBMW createCar(Class<AbstractBMW> c) { AbstractBMW t = null; try { t = (AbstractBMW) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return t; } } // Audi工厂 public class AudiFactory extends AbstractCarFactory { @Override public <AbstractAudi extends AbstractCar> AbstractAudi createCar(Class<AbstractAudi> c) { AbstractAudi t = null; try { t = (AbstractAudi) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return t; } } // 抽象Car public abstract class AbstractCar { public abstract void run(); } // 抽象BMW public abstract class AbstractBMW extends AbstractCar { @Override public void run() { System.out.println("BMW is running."); } } // 抽象Audi public abstract class AbstractAudi extends AbstractCar { @Override public void run() { System.out.println("Audi is running."); } } // 具体 BMWSerial7 public class BMWSerial7 extends AbstractBMW { @Override public void run() { System.out.println("BMW Serial 7..."); } } // 具体 AudiA8 public class AudiA8 extends AbstractAudi { @Override public void run() { System.out.println("Audi A8..."); } }
这样的话,如果需要新加 AudiA6, AudiA4, BMWSerial6 等等只需要添加一个类就可以了。
1 楼
huhu_long
2011-10-17
工厂方法 和 简单工厂方法 的区别在于 简单工厂不需要抽象, 而工厂方法则提供了抽象的可能, 可以在上面进行进一步的扩充。
pubic class SampleFactory {
public static <T extends Car> T createCar(Class<T> c) {
return (Car) Class.forName(c.getName()).newInstance();
}
}
而 工厂方法
public class CarFactory extends AbstractFactory {
@Override
public <T extends Car> T createCar(Class<T> c) {
return (Car) Class.forName(c.getName()).newInstance();
}
}
在使用上
SimpleCarFactory.createCar(Audi.class);
以及
AbstractCarFactory carFactory = new CarFactory();
carFactory.createCar(Audi.class);
pubic class SampleFactory {
public static <T extends Car> T createCar(Class<T> c) {
return (Car) Class.forName(c.getName()).newInstance();
}
}
而 工厂方法
public class CarFactory extends AbstractFactory {
@Override
public <T extends Car> T createCar(Class<T> c) {
return (Car) Class.forName(c.getName()).newInstance();
}
}
在使用上
SimpleCarFactory.createCar(Audi.class);
以及
AbstractCarFactory carFactory = new CarFactory();
carFactory.createCar(Audi.class);
发表评论
-
备忘录模式
2011-07-01 17:58 711备忘录模式有叫备份模 ... -
门面模式
2011-06-30 10:19 687没看过门面模式(facade)的童鞋也许会好奇门面模式到底是啥 ... -
观察者模式
2011-06-29 15:29 726观察者模式又叫做发布订阅模式。。。 个人感觉这两种叫法代表的 ... -
组合模式
2011-06-27 15:50 678Compose objects into TREE struc ... -
迭代器模式
2011-06-27 12:51 751迭代器模式是为了方便遍历集合而产生, 但现在java提供的迭代 ... -
适配器模式
2011-06-24 17:20 777适配器(Adaptor)是大家日常生活中基本上天天要接触的。 ... -
策略模式
2011-06-24 16:14 722对于不同的需求可能有不同的实现, 但这些实现还不能独立成为什么 ... -
装饰模式
2011-06-24 15:25 896装饰模式, 顾名思义就是在原有基础上进行装饰。 那么“装饰者” ... -
责任链模式
2011-06-24 12:45 1018责任链模式就是将请求和处理分开了, 定义一个责任链, 请求不需 ... -
命令模式
2011-06-23 18:46 643顾名思义, 命令模式就是给不同的命令然后交给别人做就可以了。 ... -
中介者模式
2011-06-23 17:11 535中介者模式, 主角当然是中介者。那中介者是干什么的呢? 问得好 ... -
原型模式
2011-06-23 11:08 724原型模式的核型就是一个clone方法。 这也没什么好说的。 说 ... -
代理模式 - 动态
2011-06-22 16:20 812接着说代理模式。 动态代理就是让程序在运行是自动去找代理。 ... -
代理模式 - 静态
2011-06-22 15:41 659代理模式有较委托模式, 就是委托人委托代理做什么事情。 代理模 ... -
建造者模式
2011-06-22 13:25 912Builder 模式很重要的两个概念就是导演类和Builder ... -
模板方法模式
2011-06-21 17:41 948模板方法模式比较简单, 其实就是对一些不可变的业务进行封装, ... -
抽象工厂模式
2011-06-21 15:58 772抽象工厂模式是工厂模式的升级版本。适用多系列多产品的场景。 ... -
简单工厂模式
2011-06-21 14:47 796缺点: 不符合开闭原则 工厂类 public class ... -
开篇语
2011-06-21 14:39 691一直都在不间断的看设计模式, 但看了忘, 忘了又看。。。没有坚 ...
相关推荐
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...
java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式
工厂方法模式作为创建型模式中的一种,提供了一种创建对象的优雅方式,它不仅使对象的创建与使用分离,还极大地提高了系统的扩展性和灵活性。本文将深入探讨工厂方法模式的内部机制,以及通过反射和配置文件技术增强...
### 软件设计之工厂方法模式解析及Java实现 #### 一、工厂方法模式概述 工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法...
工厂方法模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,当我们创建对象时,不会直接实例化具体的产品类,而是通过一个工厂类来创建。这样做的好处是,当需要添加新的产品...
本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...
《工厂方法模式在简易计算器重构中的应用》 在软件工程中,设计模式是解决常见问题的模板,它们为程序员提供了一种标准化的解决方案。工厂方法模式(Factory Method Pattern)是面向对象设计模式的一种,它在实际...
工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...
工厂方法模式是一种面向对象的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建所关心的对象,而客户端代码则使用这些对象,而不必知道对象是如何被创建的。这种...
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
Java工厂方法模式 Java工厂方法模式是一种创建型模式,它属于类的创建型模式。该模式的主要思想是,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成...
工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...
工厂方法模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建对象,但允许子类决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行,使得代码更加灵活且易于扩展...
工厂方法模式是面向对象设计模式中的行为模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,我们创建对象时不直接实例化具体的产品,而是通过一个抽象工厂类来调用具体工厂子类的方法来生成对应的具体...
工厂方法模式是面向对象设计模式中的行为模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是引用一个共同的接口来指向新创建的对象。这种模式是类的创建模式...
工厂方法模式是设计模式中的一种创建型模式,它在软件工程中扮演着非常重要的角色,尤其是在.NET框架下。这个模式的主要目标是定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得代码更加灵活,易于扩展,...
工厂方法模式是设计模式中的创建型模式,它提供了一种创建对象的最佳方式。在这个模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到子类中实现。这种模式的关键在于封装了对象的创建过程,并允许在运行时...
在iOS开发中,工厂方法模式是一种重要的设计模式,它属于创建型模式,主要用来解决对象创建过程中的灵活性问题。这个“IOS 工厂方法模式代码Demo”是为开发者提供了一个直观的例子,帮助他们理解并应用这种模式。让...