Java中的工厂模式(2)
来源:互联网 发布:coreldraw和淘宝美工 编辑:程序博客网 时间:2024/05/19 23:14
上面已经引入了抽象工厂这一概念,我们有了基础,就可以考虑一下稍微复杂一点的业务了。
比如说:现在工厂不再把单个的产品当做操作原子了,而是针对一系列产品了。如果客户想换一套产品,只需要换一个工厂即可。比如说:换主题功能。
于是,我们可以对原有的抽象工厂进行一下小小的扩展。
比如说:
一个工厂生产一系列的产品包括:AK47,Apple,Car
另一工厂生产一系列的产品包括:MagicStick,MushRoom,Broom
则:
我们先把产品抽象为Weapon,Food,Vehicle,它们做为一个整体,有两套实现。
然后就有一个抽象工厂,它负责生产,这样就有了:createWeapon,createFood,createVehicle的三个抽象方法
两个实现工厂,DefaultFactory和MagicFactory。
代码如下:
public abstract class Weapon {
public abstract void shoot();
}
public abstract class Food {
public abstract void bite();
}
public abstract class Vehicle {
public abstract void run();
}
public class AK47 extends Weapon{
public void shoot(){
System.out.println("with AK47");
}
}
public class Apple extends Food {
public void bite(){
System.out.println("with apple");
}
}
public class Car extends Vehicle{
public void run(){
System.out.println("with Car");
}
}
Magic的产品我就省略不写了
public abstract class AbstractFactory {
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}
public class DefaultFactory extends AbstractFactory{
@Override
public Food createFood() {
return new Apple();
}
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
}
MagicFactory我就省略了
测试:
public static void main(String[] args) {
/*AbstractFactory f = new DefaultFactory();*/
AbstractFactory f = new MagicFactory();
Weapon ak = f.createWeapon();
ak.shoot();
Food ap = f.createFood();
ap.bite();
Vehicle car = f.createVehicle();
car.run();
}
好了,这就是工厂模式了,其实个人感觉,也是一种特殊的准代理模式,代理的是生产而已。
比如说:现在工厂不再把单个的产品当做操作原子了,而是针对一系列产品了。如果客户想换一套产品,只需要换一个工厂即可。比如说:换主题功能。
于是,我们可以对原有的抽象工厂进行一下小小的扩展。
比如说:
一个工厂生产一系列的产品包括:AK47,Apple,Car
另一工厂生产一系列的产品包括:MagicStick,MushRoom,Broom
则:
我们先把产品抽象为Weapon,Food,Vehicle,它们做为一个整体,有两套实现。
然后就有一个抽象工厂,它负责生产,这样就有了:createWeapon,createFood,createVehicle的三个抽象方法
两个实现工厂,DefaultFactory和MagicFactory。
代码如下:
public abstract class Weapon {
public abstract void shoot();
}
public abstract class Food {
public abstract void bite();
}
public abstract class Vehicle {
public abstract void run();
}
public class AK47 extends Weapon{
public void shoot(){
System.out.println("with AK47");
}
}
public class Apple extends Food {
public void bite(){
System.out.println("with apple");
}
}
public class Car extends Vehicle{
public void run(){
System.out.println("with Car");
}
}
Magic的产品我就省略不写了
public abstract class AbstractFactory {
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}
public class DefaultFactory extends AbstractFactory{
@Override
public Food createFood() {
return new Apple();
}
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
}
MagicFactory我就省略了
测试:
public static void main(String[] args) {
/*AbstractFactory f = new DefaultFactory();*/
AbstractFactory f = new MagicFactory();
Weapon ak = f.createWeapon();
ak.shoot();
Food ap = f.createFood();
ap.bite();
Vehicle car = f.createVehicle();
car.run();
}
好了,这就是工厂模式了,其实个人感觉,也是一种特殊的准代理模式,代理的是生产而已。
- Java中的工厂模式(2)
- Java中的工厂模式
- java中的工厂模式
- java中的工厂模式
- java中的工厂模式
- java中的工厂模式
- java中的工厂模式
- java中的工厂模式
- Java中的工厂模式
- java中的工厂模式(简单工厂模式+工厂方法模式)
- Java中的简单工厂模式
- Java中的工厂模式(1)
- Java中的简单工厂模式
- Java中的简单工厂模式
- Java中的简单工厂模式
- Java中的简单工厂模式
- java中的抽象工厂模式
- Java中的简单工厂模式
- PanoramaGL library类库详细解析
- 总结showModalDialog和showModelessDialog用法
- 【译文】从糟糕的工作中幸存的10个方法
- 如何设置电脑的保护色(绿豆沙色)
- Js中event对象的x,clientX,offsetX区别
- Java中的工厂模式(2)
- j2me RMS无法实现持久化存储的问题
- hadoop实战之安装与单机模式
- php获取当前url 心得
- C言语爱好者
- 努力学习!
- c# 中 获取应用程序的路径
- 关于arcgis Identity与部署
- 2011-10-20