由歌词引发的模式思考之中篇(AbstractFactory模式)
2013-04-25 20:11
507 查看
上篇的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模式的体现。
1 public abstract class Vehicle { 2 public abstract void run(); 3 }
1 public abstract class Weapon { 2 public abstract void shoot(); 3 }
1 public abstract class Food { 2 public abstract void printName(); 3 }
1 public class Car extends Vehicle{ 2 public void run() { 3 System.out.println("car run"); 4 } 5 }
1 public class AK47 extends Weapon{ 2 public void shoot() { 3 System.out.println("AK47 shoot"); 4 } 5 }
1 public class Apple extends Food{ 2 public void printName() { 3 System.out.println("apple"); 4 } 5 }
1 public abstract class AbstractFactory { 2 public abstract Vehicle createVehicle(); 3 public abstract Weapon createWeapon(); 4 public abstract Food createFood(); 5 }
1 public class DefaultFactory extends AbstractFactory{ 2 3 @Override 4 public Car createVehicle() { 5 // TODO Auto-generated method stub 6 return new Car(); 7 } 8 9 @Override 10 public Weapon createWeapon() { 11 // TODO Auto-generated method stub 12 return new AK47(); 13 } 14 15 @Override 16 public Food createFood() { 17 // TODO Auto-generated method stub 18 return new Apple(); 19 } 20 21 }
1 public class Bloom extends Vehicle { 2 3 @Override 4 public void run() { 5 System.out.println("bloom run"); 6 } 7 8 }
1 public class MagicStick extends Weapon { 2 3 @Override 4 public void shoot() { 5 System.out.println("magicstick shoot"); 6 } 7 8 }
1 public class Muslrom extends Food { 2 3 @Override 4 public void printName() { 5 System.out.println("muslrom"); 6 } 7 8 }
1 public class MagicFactory extends AbstractFactory{ 2 3 @Override 4 public Vehicle createVehicle() { 5 // TODO Auto-generated method stub 6 return new Bloom(); 7 } 8 9 @Override 10 public Weapon createWeapon() { 11 // TODO Auto-generated method stub 12 return new MagicStick(); 13 } 14 15 @Override 16 public Food createFood() { 17 // TODO Auto-generated method stub 18 return new Muslrom(); 19 } 20 21 }
1 public class Test { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 AbstractFactory d = new DefaultFactory(); 8 // AbstractFactory d = new MagicFactory(); 9 Vehicle c = d.createVehicle(); 10 c.run(); 11 Weapon ak = d.createWeapon(); 12 ak.shoot(); 13 Food a = d.createFood(); 14 a.printName(); 15 } 16 17 }
这样,我们只需要改变工厂就可改变一系列的产品。
AbstractFactory类结构
由图可知,DefaultFactory和MagicFactory都实现AbstractFactory,DefaultFactory生产Car、AK47、Apple这一系列产品,而MagicFactory生产Broom、MagicStick、Muslroom。
关注下篇。
相关文章推荐
- 由歌词引发的模式思考之中篇(AbstractFactory模式)
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 由歌词引发的模式思考之下篇(模拟Spring的BeanFactory)
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 由歌词引发的模式思考之下篇(模拟Spring的BeanFactory)
- 由一个简单的客户端间TCP/UDP通信程序引发的关于设计模式的思考
- 非法疫苗引发的思考 -外观模式
- 网络经纪人改变就业模式,零成本创业引发思考
- review引发的有关于单例模式的思考
- OOo异步打印模式引发的思考
- 抛砖引玉之一 —— 由12306引发的抢购模式的思考
- 一次代码review引发的关于单例模式的思考
- 公司新加了一台友宝自动售货机引发的思考-适配者模式
- 由延时加载的单例模式引发的思考
- 关于装饰模式引发的思考
- SUSE Linux的CPU节电模式引发的故障案例解析
- 找猪头三[**X**]QQ号时,引发的一场深层次的思考
- 由unix环境高级编程程序清单8-1fork()引发对缓冲的思考
- 【内存泄露】由Handler引发的内存泄漏的思考
- 脚本引发的思考