[一天一个设计模式]-[工厂模式]
简单工厂模式
简单工厂模式就是把创建对象实例的工作全部交给工厂类,使用方只需要知道自己需要的类的类型。
举个栗子,养宠物,有的人喜欢猫有的人喜欢狗。
public interface Pet{
void say();
}
public class Cat implements Pet{
@Override
public void say(){
System.out.println("I'm cat.");
}
}
public class Dog implements Pet{
@Override
public void say(){
System.out.println("I'm dog.");
}
}
下面我们来创建一个宠物工厂,使用方只需要知道自己想要什么类型即可。
public class PetFactory{
public static Pet createPet(int type){
if(type==0){
return new Cat();
}else if(type == 1){
return new Dog();
}else{
return null;
}
}
}
工厂方法模式
当需要创建的实例子类越来越多,简单工厂就会非常臃肿,工厂方法模式把实例的创建放到子工厂中解决了这个问题。
举个栗子,养宠物的人还有喜欢鸟,羊的。。。
public class Bird implements Pet{
@Override
public void say(){
System.out.println("I'm bird.");
}
}
public class Sheep implements Pet{
@Override
public void say(){
System.out.println("I'm sheep.");
}
}
public interface IPetFactory{
Pet createPet();
}
public class BirdFactory implements IPetFactory{
@Override
public Pet createPet(){
return new Bird();
}
}
public class SheepFactory implements IPetFactory{
@Override
public Pet createPet(){
return new Sheep();
}
}
调用者只需要实例化需要的工厂即可。
//调用者
main(){
IPetFactory f=new SheepFactory();
Pet sheep=f.createPet();
}
抽象工厂模式
抽象工厂模式就像是前面两种模式的组合,简单工厂是一个工厂类创建所有实例,工厂方法是一类工厂类创建一类实例,抽象工厂模式是一个工厂类可以创建多类实例。
举个栗子,有人不喜欢宠物但是喜欢手机,
public interface Phone{
void fun();
}
public class IPhone implements Phone{
@Override
public void fun(){
sout("I'm iPhone");
}
}
public class OnePlus implements Phone {
@Override
public void fun(){
sout("I'm OnePlus");
}
}
public interface Factory{
Pet createPet();
Phone createPhone(int type);
}
public class SheepPhoneFactory implements Factory {
@Override
public Pet createPet(){
return new Sheep();
}
@Override
public Phone createPhone(int type){
if(type == 0 ){
return new IPone();
}else{
return new OnePlus()
}
}
}