简单工厂模式不属于23个设计模式,具体原因没有查阅相关资料,但本人自己觉得可能是因为简单工厂模式不符合了开闭原则才没提升到设计模式的地位对待吧。
新增创建新的对象时,需要修改工厂方法的逻辑,不符合开闭原则。
简单的说工厂模式就是 你扔给工厂一个参数,它给你返回一个具体的对象。
假如说我们需要生产各种品牌的手机,我们又不想自己去建造一个工厂,那我们是不是可以外包给一个专门生产手机的的厂商去做?
我们只要跟手机厂商说要生产的牌子就行了。
下面用一个例子实现之
-------------------------------------------------------------------------------------
我们要生产这样的手机,能打电话,能发短信,能播放视频
//---------------------------------------------------
package com.dp.simpleFactory;
/**
* 手机
* @author chendongj
*
*/
public abstract class Phone {
public void call(){
System.out.println("手机可以打电话!");
}
public void sendMessage(){
System.out.println("手机可以发短信!");
}
public void playVideo(){
System.out.println("手机可以播放视频!");
}
}
//--------具体的iPhone手机-------------------------------------------
package com.dp.simpleFactory;
public class Iphone extends Phone {
public void call(){
System.out.println("iPhone手机在打电话...");
}
public void sendMessage(){
System.out.println("iPhone在发短信...");
}
public void playVideo(){
System.out.println("iPhone在播放视频...");
}
}
//-------------具体的魅族手机-----------------------------------------------------------
package com.dp.simpleFactory;
public class MeiZuPhone extends Phone{
public void call(){
System.out.println("魅族手机在打电话...");
}
public void sendMessage(){
System.out.println("魅族手机在发短信...");
}
public void playVideo(){
System.out.println("魅族手机在播放视频...");
}
}
//-------------------那现在交给手机厂商去生产吧----------------------------------------------
package com.dp.simpleFactory;
/**
* 手机厂商
* @author chendongj
*
*/
public class PhoneFactory {
public static Phone createPhone(String phoneBrand){
if(phoneBrand.equals("iphone")){
//生产iPhone
return new Iphone();
}
if(phoneBrand.equals("meizu")){
//生产魅族
return new MeiZuPhone();
}
return null;
}
}
//------------测试(去拿货)------------------------------------------
package com.dp.simpleFactory;
public class TestSimpleFactory {
/**
* 测试简单工厂模式
*/
public static void main(String[] args) {
//生产iphone
Phone iphone = PhoneFactory.createPhone("iphone");
iphone.call();
iphone.sendMessage();
iphone.playVideo();
System.out.println("--------------------");
//生产魅族
Phone meizu = PhoneFactory.createPhone("meizu");
meizu.call();
meizu.sendMessage();
meizu.playVideo();
}
}
//===========输出结果=========================
iPhone手机在打电话...
iPhone在发短信...
iPhone在播放视频...
--------------------
魅族手机在打电话...
魅族手机在发短信...
魅族手机在播放视频...