【设计模式】工厂模式

class Main { public static void main(String[] args) { //简单工厂测试 /* Weapon weapon = WeaponFactory.createWeapon("m4a1"); weapon.useWeapon(); */ //工厂方法(多态工厂)测试 /* WeaponFactory wf = new AK47Factory(); Weapon weapon = wf.createWeapon(); weapon.useWeapon(); */ //抽象工厂测试 VirtualFactory vf = new DefaultFactory(); Weapon weapon = vf.createWeapon(); Car car = vf.createCar(); weapon.useWeapon(); car.drive(); } } /* //************************************************************************* //1.简单工厂(Simple Factory): interface Weapon { public void useWeapon(); } class AK47 implements Weapon { public void useWeapon() { System.out.println("the weapon is AK47"); } } class M4A1 implements Weapon { public void useWeapon() { System.out.println("the weapon is M4A1"); } } class WeaponFactory { public static Weapon createWeapon(String weaponName) { if(weaponName.equalsIgnoreCase("M4A1")) return new M4A1(); else if(weaponName.equalsIgnoreCase("AK47")) return new AK47(); else throw new RuntimeException("no that weapon!"); } } */ /* //************************************************************************ //2.多态工厂(Factory Method) interface Weapon { public void useWeapon(); } class AK47 implements Weapon { public void useWeapon() { System.out.println("the weapon is AK47"); } } class M4A1 implements Weapon { public void useWeapon() { System.out.println("the weapon is M4A1"); } } interface WeaponFactory { public Weapon createWeapon(); } // abstract class WeaponFactory // { // public abstract createWeapon(); // } class M4A1Factory implements WeaponFactory { public Weapon createWeapon() { return new M4A1(); } } class AK47Factory implements WeaponFactory { public Weapon createWeapon() { return new AK47(); } } */ //****************************************************** //3.抽象工厂(abstract factory) interface Weapon { public void useWeapon(); } interface Car { public void drive(); } class Benz implements Car { public void drive() { System.out.println("this is benz"); } } class Baoma implements Car { public void drive() { System.out.println("this is baoma"); } } class AK47 implements Weapon { public void useWeapon() { System.out.println("the weapon is AK47"); } } class M4A1 implements Weapon { public void useWeapon() { System.out.println("the weapon is M4A1"); } } interface VirtualFactory { public Weapon createWeapon(); public Car createCar(); } class DefaultFactory implements VirtualFactory { //这是一个产品族 public Weapon createWeapon() { return new M4A1(); } public Car createCar() { return new Benz(); } }



工厂模式共分为三种,简单工厂(simple factory),工厂方法(多态工厂,factory method),抽象工厂(abstract factory)。

这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况: 1.在编码时不能预见需要创建哪种类的实例。 2.系统不应依赖于产品类实例如何被创建、组合和表达的细节


总结:
(1)
简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。
(2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。
(3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值