package pattern.factory;
/**
工厂模式 :常用的设计模式
目的: 创建对象 ,将创建实例和使用实例的工作分开,代码解耦合
途径:通过对传入参数的判断,创建相对应的实例。
一般工厂中创建的实例有相同特征。我们在使用时使用它们共有的接口或抽象类,不必关注具体的实现细节。
*/
/**
* @Author : haojiangt
* @Description :Phone接口
**/
public abstract class Phone {
public abstract void ShowMyself() ;
}
package pattern.factory;
/**
* @Author : haojiangt
* @Description :Phone实现类 IPhone
**/
public class IPhone extends Phone{
@Override
public void ShowMyself() {
System.out.println("IPhone is being connected.");
}
}
package pattern.factory;
/**
* @Author : haojiangt
* @Description :Phone实现类 MiPhone
**/
public class MiPhone extends Phone {
@Override
public void ShowMyself() {
System.out.println("Mi is being connected.");
}
}
package pattern.factory;
/**
* @Author : haojiangt
* @Description :Phone实现类 RoyalPhone
**/
public class RoyalPhone extends Phone{
@Override
public void ShowMyself() {
System.out.println("RoyalPhone is being connected.");
}
}
package pattern.factory;
/**
* @Author : haojiangt
* @Description :
**/
public class PhoneFactory {
public static Phone getPhone(int price){
switch (price){
case 2 :
return new MiPhone();
case 1 :
return new RoyalPhone();
default:
return new IPhone();
}
}
/**
* Phone是一个抽象类,有ShowMyself()方法
* 在main方法中,不去手动创建实例,交给PhoneFactory工厂创建,当我们想
* 再扩展新的手机实现类时,只需要在PhoneFactory加入即可,不会造成对main方法代码的侵入。
* 我们只需要确定创建哪一种实例,而不去关注如何创建。
*/
public static void main(String[] args){
Phone myPhone = PhoneFactory.getPhone((int) System.currentTimeMillis()%5);
myPhone.ShowMyself();
}
}