由歌词引发的模式思考之中篇(AbstractFactory模式)
2013-04-14 22:22
375 查看
上篇的FactoryMethod阐述的是生产不同的交通工具的工厂,要么让老张单独的开车去,要么让他单独的开飞机去,但是呢,这样老张不是很孤独寂寞去东北吗?一点娱乐的气息都木有,OK,现在我们酝酿一个这样的场景,让老张开着车,叼着苹果,扛着AK47去东北,这样老张就不无聊了,车、苹果、AK47,这是一个系列的产品,而AbstractFactory就是解决系列产品生产问题。
二、AbstractFactory
AbstractFactory模式
除了生产正常世界的系列产品,我们还可以生产魔法世界的系列产品(扫帚、魔法棒等),其实我们用的QQ或者酷我音乐盒等所用的皮肤更换功能,都是AbstractFactory模式的体现。
这样,我们只需要改变工厂就可改变一系列的产品。
AbstractFactory类结构
由图可知,DefaultFactory和MagicFactory都实现AbstractFactory,DefaultFactory生产Car、AK47、Apple这一系列产品,而MagicFactory生产Broom、MagicStick、Muslroom。
关注下篇。
二、AbstractFactory
AbstractFactory模式
除了生产正常世界的系列产品,我们还可以生产魔法世界的系列产品(扫帚、魔法棒等),其实我们用的QQ或者酷我音乐盒等所用的皮肤更换功能,都是AbstractFactory模式的体现。
public abstract class Vehicle { public abstract void run(); }
public abstract class Weapon { public abstract void shoot(); }
public abstract class Food { public abstract void printName(); }
public class Car extends Vehicle{ public void run() { System.out.println("car run"); } }
public class AK47 extends Weapon{ public void shoot() { System.out.println("AK47 shoot"); } }
public class Apple extends Food{ public void printName() { System.out.println("apple"); } }
public abstract class AbstractFactory { public abstract Vehicle createVehicle(); public abstract Weapon createWeapon(); public abstract Food createFood(); }
public class DefaultFactory extends AbstractFactory{ @Override public Car createVehicle() { // TODO Auto-generated method stub return new Car(); } @Override public Weapon createWeapon() { // TODO Auto-generated method stub return new AK47(); } @Override public Food createFood() { // TODO Auto-generated method stub return new Apple(); } }
public class Bloom extends Vehicle { @Override public void run() { System.out.println("bloom run"); } }
public class MagicStick extends Weapon { @Override public void shoot() { System.out.println("magicstick shoot"); } }
public class Muslrom extends Food { @Override public void printName() { System.out.println("muslrom"); } }
public class MagicFactory extends AbstractFactory{ @Override public Vehicle createVehicle() { // TODO Auto-generated method stub return new Bloom(); } @Override public Weapon createWeapon() { // TODO Auto-generated method stub return new MagicStick(); } @Override public Food createFood() { // TODO Auto-generated method stub return new Muslrom(); } }
public class Test { /** * @param args */ public static void main(String[] args) { AbstractFactory d = new DefaultFactory(); // AbstractFactory d = new MagicFactory(); Vehicle c = d.createVehicle(); c.run(); Weapon ak = d.createWeapon(); ak.shoot(); Food a = d.createFood(); a.printName(); } }
这样,我们只需要改变工厂就可改变一系列的产品。
AbstractFactory类结构
由图可知,DefaultFactory和MagicFactory都实现AbstractFactory,DefaultFactory生产Car、AK47、Apple这一系列产品,而MagicFactory生产Broom、MagicStick、Muslroom。
关注下篇。
相关文章推荐
- 由歌词引发的模式思考之中篇(AbstractFactory模式)
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 由歌词引发的模式思考之下篇(模拟Spring的BeanFactory)
- 由歌词引发的模式思考之下篇(模拟Spring的BeanFactory)
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 由一个简单的客户端间TCP/UDP通信程序引发的关于设计模式的思考
- 公司新加了一台友宝自动售货机引发的思考-适配者模式
- 网络经纪人改变就业模式,零成本创业引发思考
- review引发的有关于单例模式的思考
- OOo异步打印模式引发的思考
- 抛砖引玉之一 —— 由12306引发的抢购模式的思考
- 一次代码review引发的关于单例模式的思考
- 由延时加载的单例模式引发的思考
- 非法疫苗引发的思考 -外观模式
- 关于装饰模式引发的思考
- PHP中的实现AbstractFactory模式
- 温故而知新:设计模式之抽象工厂(AbstractFactory)
- 一句T-SQL语句引发的思考
- org.apache.jasper.JasperException: Unable to load class for JSP问题引发的思考
- 由url-pattern引发的思考