控制台会输出:
12345671234567
这就是工厂方法模式,其中遍历器也算是一种迭代器设计模式,后面会介绍。我不会跟你讲什么造车,造轮船,造人,我会给出实际应用。这里只是其中一种应用的举例,当一个接口的一系列实现需要另外的对象对其进行相同操作时,我们就可以这样用:在这个接口中定义返回另外一个对象的方法(工厂方法),然后再在这个接口的实现中,返回对其操作的对象。
上面这个例子会在迭代器模式中给出完整的实现代码。
一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。“”的关系。
与简单工厂间的取舍:工厂方法模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式, 把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来, 从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。 反过来讲,简单工厂模式是由工厂方法模式退化而来。设想如果我们非常确定一个系统只需要一个实的工厂类, 那么就不妨把抽象工厂类合并到实的工厂类中去。而这样一来,我们就退化到简单工厂模式了。
可以看出工厂方法的加入,使得对象的数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。
如果再分得详细一点,一个工厂可能不只是生产手机(如小米除了手机,连电饭锅都有),但有得工厂智能生成低端的产品,而大一点的工厂可能通常是生成更高端的产品。所以一个工厂是不够用了,这时,就应该使用抽象工厂来解决这个问题。
3、抽象工厂方法模式(Abstract Factory Pattern)
别名:配套(Another Name:Kit)
Provide an intece for creating families of related or dependent objects without specifying their concrete classess.
提供一个创建一系列或相互依赖对象的接口,而无须指定他们的具体的类。
何时使用:
优点:
上述生成魅族产品的例子中,我们只生产了手机,但是它不止有手机一种产品,可能还有其他的,比如耳机,为了还可以生成耳机,我们需要对上例进行扩展。
我们先给出上面生成手机的例子的扩展后的抽象工厂模式代码,以比较这几种模式:
//抽象工厂模式public class AbstractFactory { public static void main(String args[]){ IFactory bigfactory = new BigFactory(); IFactory smallfactory = new BigFactory(); bigfactory.producePhone().run(); bigfactory.produceHeadset().play(); smallfactory.producePhone().run(); smallfactory.produceHeadset().play(); }}//抽象产品*2intece Headset{ void play();}//抽象产品intece MeizuPhone{ void run();}//具体产品*2*2class PRO5 implements MeizuPhone{ @Override public void run() { System.out.println("我是一台PRO5"); }}class MX5 implements MeizuPhone{ @Override public void run() { System.out.println("我是一台MX5"); }}class EP21 implements Headset{ @Override public void play() { System.out.println("我是一副EP21"); }}class EP30 implements Headset{ @Override public void play() { System.out.println("我是一台EP30"); }}//抽象工厂intece IFactory{ MeizuPhone producePhone(); Headset produceHeadset();}//具体工厂*2class BigFactory implements IFactory{ @Override public MeizuPhone producePhone() { return new PRO5(); } @Override public Headset produceHeadset() { return new EP30(); }}//具体工厂*2class SmallFactory implements IFactory{ @Override public MeizuPhone producePhone() { return new MX5(); } @Override public Headset produceHeadset() { return new EP21(); }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-6.html
美国威胁恐吓伊拉克没用的
换言之你10万存银行一年就是购买力变成99900
现在世界新格局已经形成了