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+"牌这里添加旧手机的业务");
}
}
工厂接口类
/**
*
* @包名 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("没有对应实例");
}
}
}
测试:
public class TestMain {
public static void main(String[] args) {
PhoneFactory factory = new MIUPhoneFactory();
Phone phone = factory.getInstance("new");
phone.call();
}
}
运行代码结果:小米牌这里添加新手机的业务
这里说的层级结构:比如,手机分为新旧款式 而新旧中还有品牌 等等...
而这里用到工厂方法模式(虚拟构造模式或者多态性工厂)
简单工厂和工厂方法模式 都是为我们解决 代码过度耦合的问题,为我们提供类似于中间调度的中间件.
如果你明确你的实体类型结构不会太过复杂,你还是可以选择简单工厂模式.
==========简单的说就是我们把工厂类抽象出来,提供不同的实现============
实例接口
/**
* @类名 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();
}
}
运行代码结果:小米牌这里添加新手机的业务
相关文章推荐
- JAVA设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- JAVA设计模式——工厂方法(Factory Method)模式
- java_23种设计模式之工厂方法模式
- JAVA设计模式创建型模式之工厂方法
- JAVA设计模式——工厂方法
- Java设计模式之二 —— 工厂方法
- JAVA设计模式之工厂方法 (创建型模式)
- 设计模式之Factory,Java工厂方法
- Java:设计模式之工厂方法(Factory Method)
- java 设计模式-创建模式之工厂方法模式2
- java设计模式--工厂方法设计模式
- 追MM与设计模式的JAVA实现-简单工厂方法
- java设计模式之工厂方法模式
- java设计模式之工厂方法
- Java设计模式(一)设计模式的原则、工厂方法和抽象工厂
- 3.23种设计模式的Java版--Factory Method(工厂方法)
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 设计模式(一)----- 工厂方法(FactoryMethod)----(JAVA版)