设计模式学习---工厂模式
2012-04-29 16:30
106 查看
一:简单工厂模式
1:使用简单工厂模式的优势
让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性,可扩展性。工厂模式也有一点缺陷:当产品修改时,工厂类也要做相应的修改。
2:下面实例
小张开车去东北
这里涉及到小张是乘坐什么交通工具去东北?汽车,飞机,火车.....都可以
Car类
Plane类
接口类Moveable
抽象类VehicleFactory
CarFactory类
PlaneFactory类
测试类
3:下图是类图之间的关系
此时如要换一种方式去东北,只需要按照上图给2个接口都添加实现即可。
由此我们可以想象,如果工厂中要产生大量的产品系列,那样的话,就需要各种添加大量的实现,容易造成工厂泛滥。
二:抽象工厂模式
1:定义及原因:
因为使用简单工厂模式,使得客户端代码成功地与被调用对象的实现类分离,但却带来了另外一种耦合:客户端代码与不同的工厂类耦合,这依然是一个问题。
我们考虑在增加一个工厂类,该类不生产具体的Vehicle类,而是生产VehicleFactory实例------简而言之,该类不制造具体的被调用对象,而是制造不同的工厂对象。这就是抽象工厂模式。
2:如下实例:
抽象工厂类:制造不同的工厂对象
MagicFactory类:创建系列与魔法有关的食物,交通工具,武器对象
DefaultFactory类:创建默认类型的食物,交通工具,武器对象
Food类:生产Food
继承Food的两个类
Apple类
MushRoom类
Vehicle类
继承Vehicle类的两个类
Car类
Broom类
Weapon类
继承Weapon类的两个类
AK47类
MagicStick类
3:下面是类图关系
可以用配置文件配置,具体用法原来已经讲过;
在抽象工厂模式中,如要产生大量产品品种对象,容易泛滥。
1:使用简单工厂模式的优势
让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性,可扩展性。工厂模式也有一点缺陷:当产品修改时,工厂类也要做相应的修改。
2:下面实例
小张开车去东北
这里涉及到小张是乘坐什么交通工具去东北?汽车,飞机,火车.....都可以
Car类
public class Car implements Moveable{ public void run() { System.out.println("冒着烟奔跑中car......."); } }
Plane类
public class Plane implements Moveable { @Override public void run() { System.out.println("扇着翅膀前进中plane...."); } }
接口类Moveable
public interface Moveable { void run(); }
抽象类VehicleFactory
public abstract class VehicleFactory { abstract Moveable create(); }
CarFactory类
public class CarFactory extends VehicleFactory{ public Moveable create() { return new Car(); } }
PlaneFactory类
public class PlaneFactory extends VehicleFactory{ public Moveable create() { return new Plane(); } }
测试类
public class Test { public static void main(String[] args) { VehicleFactory factory = new CarFactory(); Moveable m = factory.create(); m.run(); } }
3:下图是类图之间的关系
此时如要换一种方式去东北,只需要按照上图给2个接口都添加实现即可。
由此我们可以想象,如果工厂中要产生大量的产品系列,那样的话,就需要各种添加大量的实现,容易造成工厂泛滥。
二:抽象工厂模式
1:定义及原因:
因为使用简单工厂模式,使得客户端代码成功地与被调用对象的实现类分离,但却带来了另外一种耦合:客户端代码与不同的工厂类耦合,这依然是一个问题。
我们考虑在增加一个工厂类,该类不生产具体的Vehicle类,而是生产VehicleFactory实例------简而言之,该类不制造具体的被调用对象,而是制造不同的工厂对象。这就是抽象工厂模式。
2:如下实例:
抽象工厂类:制造不同的工厂对象
public abstract class AbstractFactory { public abstract Vehicle createVehicle(); public abstract Weapon createWeapon(); public abstract Food createFood(); }
MagicFactory类:创建系列与魔法有关的食物,交通工具,武器对象
public class MagicFactory extends AbstractFactory { @Override public Food createFood() { return new MushRoom(); } @Override public Vehicle createVehicle() { return new Broom(); } @Override public Weapon createWeapon() { return new MagicStick(); } }
DefaultFactory类:创建默认类型的食物,交通工具,武器对象
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(); } }
Food类:生产Food
public abstract class Food { public abstract void printName(); }
继承Food的两个类
Apple类
public class Apple extends Food { public void printName() { System.out.println("apple"); } }
MushRoom类
public class MushRoom extends Food { @Override public void printName() { System.out.println("mushroom"); } }
Vehicle类
public abstract class Vehicle { public abstract void run(); }
继承Vehicle类的两个类
Car类
public class Car extends Vehicle { public void run() { System.out.println("冒着烟奔跑中car......."); } }
Broom类
public class Broom extends Vehicle{ public void run() { System.out.println("一路沙尘暴飞奔而来broom....."); } }
Weapon类
public abstract class Weapon { public abstract void shoot(); }
继承Weapon类的两个类
AK47类
public class AK47 extends Weapon{ public void shoot() { System.out.println("哒哒哒..."); } }
MagicStick类
public class MagicStick extends Weapon { @Override public void shoot() { System.out.println("fire hu hu hu ..."); } }
3:下面是类图关系
可以用配置文件配置,具体用法原来已经讲过;
冒着烟奔跑中car....... 哒哒哒... apple
在抽象工厂模式中,如要产生大量产品品种对象,容易泛滥。
相关文章推荐
- 设计模式学习-工厂模式
- 简单工厂模式、工厂方法模式和抽象工厂模式-设计模式学习
- 设计模式学习(二)工厂方法
- 跟着实例学习设计模式(2)-静态工厂(创建型)
- Java-马士兵设计模式学习笔记-工厂模式-单例及多例
- 跟JBPM学习设计模式之简单工厂模式
- 设计模式学习草稿:简单工厂,工厂,抽象工厂
- 【软考学习】设计模式——工厂方法
- C++ 工厂方法设计模式的学习 (Boolan学习笔记第12周)
- 跟着实例学习设计模式(3)-工厂方法(创建型)
- 设计模式 学习笔记(1)简单工厂模式、策略模式
- [Java] 学习:java设计模式—工厂模式.
- 设计模式学习之简单工厂
- 学习设计模式笔记之工厂模式1
- 学习设计模式——工厂方法
- 设计模式学习--工厂模式
- 工厂方法模式【设计模式学习-05】
- 设计模式学习笔记(五):工厂方法模式
- 简单工厂模式(未完成)——小鸟学习设计模式笔记系列
- 记录学习设计模式--简单工厂模式