设计模式——工厂模式(java)

来源:互联网 发布:python return{} 编辑:程序博客网 时间:2024/06/08 14:53

工厂:顾名思义,生产,加工产品的地方

工厂模式:就是在软件中提供专门用来创建对象实例的类(相当于一个加工生产对象的工厂),对所有的new操作进行封装,当要实例化对象的时候,根据传入的参数决定要实例化哪一个对象。

工厂模式包括工厂方法模式抽象工厂模式

抽象工厂模式是工厂方法模式的扩展。


工厂方法模式:

我们要创建一个生产不同口味冰淇淋的工厂,首先所有口味的冰淇淋类都会有一个生成冰淇淋的方法,而这个方法就可以抽象为一个接口(IceCreamInterface),让不同口味的冰淇淋类实现该接口,最后还需要一个工厂类,根据传入的参数实例化不同口味的冰淇淋对象。


1. 制作冰淇淋的方法接口

//冰淇淋接口public interface IceCreamInterface {    //制作冰淇淋的方法public void createIceCream();}

2. 实现接口的不同口味的冰淇淋类
//制作菠萝冰淇淋public class PineappleCream implements IceCreamInterface {@Overridepublic void createIceCream() {System.out.println("生成一个菠萝冰淇淋");}}

//制作草莓冰淇淋public class StrawberryCream implements IceCreamInterface {@Overridepublic void createIceCream() {System.out.println("生成一个草莓冰淇淋");}}

3. 冰淇淋工厂类,根据传入的字符串实例化冰淇淋对象

//生成冰淇淋的工厂public class IceCreamFactory {//根据传入的name来判断需要创建哪个对象public IceCreamInterface getIceCream(String name){if("strawberry".equals(name)){return new StrawberryCream();}else if("pineapple".equals(name)){return new PineappleCream();}else{return null;}}}

4. 调用工厂类实例化对象
IceCreamFactory factory1=new IceCreamFactory();//向上转型IceCreamInterface iceCream1=factory1.getIceCream("strawberry");if(iceCream1!=null){iceCream1.createIceCream();}iceCream1=factory1.getIceCream("pineapple");if(iceCream1!=null){iceCream1.createIceCream();}


抽象工厂模式

我们要生产两种类别的冰淇淋,分别是蛋卷冰淇淋和纸杯冰淇淋,同时蛋卷冰淇淋还分手工和机器生产的两种,纸杯同样也分手工和机器的两种,于是我们要生产四种产品类型的冰淇淋(四个生成不同对象的类)。要建立两个工厂,一个是手工工厂用于生产手工冰淇淋(实例化手工产品的对象),一个是机器工厂用于生产机器冰淇淋(实例化机器产品的对象)。

1. 抽象生产纸杯冰淇淋方法为CupCream接口

//纸杯冰淇淋接口public interface CupCream {public void createCupCream();}
2. 实现接口的手工纸杯冰淇淋类和机器纸杯冰淇淋类

//手工纸杯冰淇淋public class ManualCupCream implements CupCream{@Overridepublic void createCupCream() {System.out.println("生成一个手工纸杯冰淇淋");}}
//机器纸杯冰淇淋public class MachineCupCream implements CupCream{@Overridepublic void createCupCream() {System.out.println("生成一个机器纸杯冰淇淋");}}
3. 抽象生产蛋卷冰淇淋方法为EggCream接口
//蛋卷冰淇淋接口public interface EggCream {public void createEggCream();}
4. 实现接口的手工蛋卷冰淇淋类和机器蛋卷冰淇淋类
//手工蛋卷冰淇淋public class ManualEggCream implements EggCream {@Overridepublic void createEggCream() {System.out.println("生成一个手工蛋卷冰淇淋");}}
//机器蛋卷冰淇淋public class MachineEggCream implements EggCream {@Overridepublic void createEggCream() {// TODO Auto-generated method stubSystem.out.println("生成一个机器蛋卷冰淇淋");}}

5. 定义包装工厂接口,包括得到蛋卷冰淇淋和纸杯冰淇淋的抽象方法
//包装工厂接口public interface WrappingFactroy {public EggCream  getEggCream();public CupCream getCupCream();}

6. 实现包装工厂接口的手工工厂和机器工厂
//手工生产工厂public class ManualFactory implements WrappingFactroy{@Overridepublic EggCream getEggCream() {return new ManualEggCream();}@Overridepublic CupCream getCupCream() {return new ManualCupCream();}}
//机器生产工厂public class MachineFactory implements WrappingFactroy{@Overridepublic EggCream getEggCream() {return new MachineEggCream();}@Overridepublic CupCream getCupCream() {return new MachineCupCream();}}

7. 调用工厂类实例化对象
WrappingFactroy wrapping=new ManualFactory() ;EggCream eggCream=wrapping.getEggCream();eggCream.createEggCream();CupCream cupCream=wrapping.getCupCream();cupCream.createCupCream();wrapping=new MachineFactory();eggCream=wrapping.getEggCream();eggCream.createEggCream();cupCream=wrapping.getCupCream();cupCream.createCupCream();







原创粉丝点击