您的位置:首页 > 编程语言 > Java开发

java设计模式之工厂方法模式

2016-08-29 14:13 393 查看
接上文,说道简单工厂模式.有一个缺点是如果实体类型过多的时候或者层级结构大于两层时,整个工厂类会显得特别臃肿.

这里说的层级结构:比如,手机分为新旧款式  而新旧中还有品牌 等等...

而这里用到工厂方法模式(虚拟构造模式或者多态性工厂)

简单工厂和工厂方法模式 都是为我们解决 代码过度耦合的问题,为我们提供类似于中间调度的中间件.

如果你明确你的实体类型结构不会太过复杂,你还是可以选择简单工厂模式.

==========简单的说就是我们把工厂类抽象出来,提供不同的实现============

实例接口

/**
* @类名 Phone.java
* @作者 zx
* @创建日期 2016年8月29日
* @描述 实体类接口
* @版本 V 1.0
*/
public interface Phone {
void call();
}


实体类
/**
*
* @类名 OldPhone.java
* @作者 zx
* @创建日期 2016年8月29日
* @描述 老式手机
* @版本 V 1.0
*/
public class OldPhone implements Phone{
private String brand;

public OldPhone(String brand) {
this.brand = brand;
}
@Override
public void call() {
System.out.println(brand+"牌这里添加旧手机的业务");
}
}
/**
* @类名 NewPhone.java
* @作者 zx
* @创建日期 2016年8月29日
* @描述 新式手机
* @版本 V 1.0
*/
public class NewPhone implements Phone{
private String brand;

public NewPhone(String brand) {
this.brand = brand;
}
@Override
public void call() {
System.out.println(brand+"牌这里添加新手机的业务");
}
}


工厂接口类
/**
*
* @包名 zx.in.ibm.factory_method
* @类名 PhoneFactory.java
* @作者 zx
* @创建日期 2016年8月29日
* @描述 抽象出来的工厂类
* @版本 V 1.0
*/
public interface PhoneFactory {
Phone getInstance(String type);
}
工厂接口实现
/**
*
* @包名 zx.in.ibm.factory_method
* @类名 IPhoneFactory.java
* @作者 zx
* @创建日期 2016年8月29日
* @描述 苹果手机工厂实现
* @版本 V 1.0
*/
public class IPhoneFactory implements PhoneFactory {

@Override
public Phone getInstance(String type) {
if("old".equals(type)){
return new OldPhone("苹果");
}else if("new".equals(type)){
return new NewPhone("苹果");
}else{
throw new RuntimeException("没有对应实例");
}
}

}

/**
*
* @包名 zx.in.ibm.factory_method
* @类名 MIUPhoneFactory.java
* @作者 zx
* @创建日期 2016年8月29日
* @描述 小米手机工厂实现
* @版本 V 1.0
*/
public class MIUPhoneFactory implements PhoneFactory {

@Override
public Phone getInstance(String type) {
if("old".equals(type)){
return new OldPhone("小米");
}else if("new".equals(type)){
return new NewPhone("小米");
}else{
throw new RuntimeException("没有对应实例");
}
}
}


测试:
public class TestMain {
public static void main(String[] args) {
PhoneFactory factory = new MIUPhoneFactory();
Phone phone = factory.getInstance("new");
phone.call();
}
}


运行代码结果:小米牌这里添加新手机的业务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: