设计模式-工厂方法模式

工厂模式提供创建对象的接口,是最常用的设计模式。本实例-旅游 根据工厂模式的分类不同,介绍工厂模式之二的工厂方式模式的使用方法及使用规则。

实现工厂方法模式的技术要点如下:
1.工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式了不同的工厂子类     来分担。
2.工厂方法模式由抽象工厂角色、具体工厂角色、抽象产品角色和具体产品角色组成。
3.抽象工厂角色是工厂方法模式的核心,它与应用程序五官,是具体工厂角色必须实现的接口或者必须继承的父类,它由抽象类或者接口来实现。
4.具体工厂角色含有与具体业务逻辑有关的代码,由应用程序调用以创建对应的具体产品的对象。
5.抽象产品角色是具体产品继承的父类或者是实现的接口,一般由抽象类或者接口来实现。
6.具体产品角色由具体的类来实现。

源代码


package Pattern;

interface Tour{ //旅游类
	public void visit(); //旅游方式
}
interface Visit{
	public Tour visitStyle();//具体的旅游方式
}
class GoAbroad implements Tour {//出国旅游   接口的实现类
	public void visit(){//实现接口的方法
		System.out.println("咱们去国外驴友 吧!");
	}
}
class Hangzhou implements Tour {  //杭州旅游  接口的实现类
	public void visit(){
		System.out.println("杭州风景优美,咱去那吧!");
	}
}
class Home implements Tour {//在家  接口的实现类
	public void visit(){
		System.out.println("哎,没有钱哪也去不了!");
	}
}
class GoAbroadVisit implements Visit {//返回出国旅游对象 调用实现类的工厂类
	public Tour visitStyle(){
		return new GoAbroad();
	}
}

class HangZhouVisit implements Visit {//返回杭州旅游对象 调用实现类的工厂类
	public Tour visitStyle(){
		return new Hangzhou();
	}
}

class HomeVisit implements Visit {//返回在家对象 调用实现类的工厂类
	public Tour visitStyle(){
		return new Home();
	}
}
public class TextMethodFactory {
	public static void main(String[] args) {
		try {
			Visit visit=new HangZhouVisit();  //接口变量引用实现类对象
			Tour tour=visit.visitStyle();  //调用方法返回旅游实例
			System.out.println("今年咱们去哪儿旅游呀?");
			tour.visit();//调用方法获得旅游方式
		} catch (Exception e) {
			System.out.println("今年旅游计划取消?");
		} finally{
			System.out.println("..........");
		}
	}
}



源程序解读
1.程序中定义两个接口Tour、Visit,三个接口的实现类GoAbroad、Hangzhou、Home以及三个调用实现类的工厂类GoAbroadVisit、HangZhouVisit、HomeVisit
2.可以看出使用工厂方法模式,使得对象的数量成倍增长。当旅游对象即接口的实现类非常多时,会出现大量的与之相应的工厂对象,这样成对的增长,又会使得代码的编写变得繁杂类似于旅游这种情况,当使用工厂方法模式变得比较繁杂时,可以考虑使用简单工厂模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值