java中的设计模式(二)--工厂方法模式 接口回调

上一次讲了简单工厂模式,我们可以做的其不满足OCP原则,下面引入工厂方法模式

结构图如下:

1.产品类

package com.sf.entity;

import com.sf.jk.Fruit;

public class Apple implements Fruit {

	public Apple(){
		System.out.println("生产水果");
	}
	public void eat() {
		System.out.println("苹果可以吃");
	}

	public void plant() {
		// TODO Auto-generated method stub
		System.out.println("苹果可以种");
	}

	public void sell() {
		// TODO Auto-generated method stub
		System.out.println("苹果可以卖");
	}

}
	

 

package com.sf.entity;

import com.sf.jk.Fruit;

public class Banana implements Fruit{

	public Banana(){
		System.out.println("生产香蕉");
	}
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("香蕉可以吃");
	}

	public void plant() {
		// TODO Auto-generated method stub
		System.out.println("香蕉可以种");
	}

	public void sell() {
		// TODO Auto-generated method stub
		System.out.println("香蕉可以卖");
	}
	
}


2.产品的抽象接口

package com.sf.jk;

public interface Fruit {
	public void eat();
	public void plant();
	public void sell();
}


3.工厂的抽象接口

package com.sf.jk;

public interface CreateFactory {
	public Fruit createFruit();
}


4.工厂的具体实现方法

package com.sf.hf;

import com.sf.entity.Apple;
import com.sf.jk.CreateFactory;
import com.sf.jk.Fruit;

public class CreateApple implements CreateFactory{

	public Fruit createFruit() {
		// TODO Auto-generated method stub
		return new Apple();
	}
}


 

package com.sf.hf;

import com.sf.entity.Banana;
import com.sf.jk.CreateFactory;
import com.sf.jk.Fruit;

public class CreateBanana implements CreateFactory{

	public Fruit createFruit() {
		// TODO Auto-generated method stub
		return new Banana();
	}
}


5.客户端调用

import com.sf.hf.CreateApple;
import com.sf.hf.CreateBanana;
import com.sf.hf.FruitFactory;
import com.sf.jk.CreateFactory;
import com.sf.jk.Fruit;


public class Test {

	private static CreateFactory cf1,cf2;
	private static Fruit fruit;
	
	public static void main(String[] args) {
		System.out.println("---------创建苹果---------");
		cf1 = new CreateApple();
		fruit = cf1.createFruit();
		fruit.eat();
		fruit.plant();
		System.out.println("---------创建香蕉---------");
		cf2 = new CreateBanana();
		fruit = cf2.createFruit();
		fruit.eat();
		fruit.plant();
	}

}

 

6.运行结果

---------创建苹果---------
生产水果
苹果可以吃
苹果可以种
---------创建香蕉---------
生产香蕉
香蕉可以吃
香蕉可以种


简单工厂模式与工厂方法的简单比较:

我们可以看出,工厂方法满足ocp原则,及对扩展开放,对修改关闭。

在工厂方法模式中,工厂被抽象成一个接口,具体的生产产品的实例化操作放在了其子类或者实现该几口的具体方法中,

当客户端可以根据不同的需求调用不同的实现方法,及生产产品的方法。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值