Java设计模式—工厂方法(Factory Method)

  Template Method Pattern是在父类建立处理逻辑的大纲骨架,而在子类补充具体的处理内容,如果把模板方法用在产生对象实例方面,就是式厂方法模式
      Factory Method Pattern在父类规定对象的创建方法,但并没有深入到较具体的类名。所有具体的完整内容都放在子类,根据这个原则,我们可以大致分成产生对象实例的框架和实际产生对象实例的类两方面

    1.框架类

package com.pattern.factorymethod;

public abstract class Factory {
	public final Cup make(String shape,String color) {//产生对象的方法,用final修饰把保证在子类中不会被修改
		Cup cup = makeCup(shape);
		smearColor(cup,color);
		return cup;
	}
	protected abstract Cup makeCup(String shape); //抽象方法,制作水杯,shape参数指定水杯的外形
	protected abstract void smearColor(Cup cup,String color);  //抽象方法,给水杯涂上颜色
	
}

 2.实现类

  

package com.pattern.factorymethod;

public class CupFactory extends Factory {

	protected Cup makeCup(String shape) {
		Cup cup = new Cup();
		cup.setShape(shape);
		return cup;
	}
	protected void smearColor(Cup cup, String color) {//涂颜色
		cup.setColor(color);
	}

}

 3.水杯(实体类)

 

package com.pattern.factorymethod;

public  class Cup {
	private String shape;
	private String color;

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getShape() {
		return shape;
	}

	public void setShape(String shape) {
		this.shape = shape;
	}	
	
}

 

4.测试

 

package com.pattern.factorymethod;

public class Main {
	public static void main(String[] args) {
		//创建一个水杯工厂
		CupFactory factory = new CupFactory();
		Cup cup1 = factory.make("圆形", "红色");//我要一个圆形,红色的杯子 
		System.out.println("杯子造好了");
		System.out.println("形状:"+cup1.getShape());
		System.out.println("颜色:"+cup1.getColor());
		
		Cup cup2 = factory.make("方形", "蓝色");//我要一个方形,蓝色的杯子 
		System.out.println("杯子造好了");
		System.out.println("形状:"+cup2.getShape());
		System.out.println("颜色:"+cup2.getColor());
	}
}

 

结果:

    杯子造好了
    形状:圆形
    颜色:红色
    杯子造好了
    形状:方形
    颜色:蓝色

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值