最新在学习设计模式
手写工厂方法模式和抽象方法模式
实体类:
package study.design.factory.model;
public class Apple implements Phone{
@Override
public String getName() {
// TODO Auto-generated method stub
return "apple";
}
}
package study.design.factory.model;
public class Samsung implements Phone{
@Override
public String getName() {
// TODO Auto-generated method stub
return "samsung";
}
}
package study.design.factory.model;
public interface Phone {
String getName();
}
工厂方法模式:
package study.design.factory.func;
import study.design.factory.model.Apple;
import study.design.factory.model.Phone;
public class AppleFactory implements Factory{
@Override
public Phone makePhone() {
// TODO Auto-generated method stub
return new Apple();
}
}
package study.design.factory.func;
import study.design.factory.model.Phone;
import study.design.factory.model.Samsung;
public class SansumFactory implements Factory{
@Override
public Phone makePhone() {
// TODO Auto-generated method stub
return new Samsung();
}
}
package study.design.factory.func;
import study.design.factory.model.Phone;
/**
*
* @comment 工厂方法模式
* @author bin
* @date 2018年7月27日
*/
public interface Factory {
Phone makePhone();
}
抽象方法模式:
package study.design.factory.abstr;
import study.design.factory.model.Phone;
/**
*
* @comment 抽象工厂模式
* @author bin
* @date 2018年7月27日
*/
public abstract class AbstractFactory {
public abstract Phone makeApple();
public abstract Phone makeSamsung();
}
package study.design.factory.abstr;
import study.design.factory.model.Apple;
import study.design.factory.model.Phone;
import study.design.factory.model.Samsung;
public class PhoneFactory extends AbstractFactory{
@Override
public Phone makeApple() {
// TODO Auto-generated method stub
return new Apple();
}
@Override
public Phone makeSamsung() {
// TODO Auto-generated method stub
return new Samsung();
}
}
Test
package study.design.factory.test;
import study.design.factory.func.AppleFactory;
import study.design.factory.func.Factory;
import study.design.factory.func.SansumFactory;
public class FunTest {
public static void main(String[] args) {
Factory app=new AppleFactory();
System.out.println(app.makePhone().getName());
Factory san=new SansumFactory();
System.out.println(san.makePhone().getName());
}
}
package study.design.factory.test;
import study.design.factory.abstr.AbstractFactory;
import study.design.factory.abstr.PhoneFactory;
public class AbstrTest {
public static void main(String[] args) {
AbstractFactory af=new PhoneFactory();
System.out.println(af.makeSamsung().getName());
System.out.println(af.makeApple().getName());
}
}
说下自己的看法:
其实从test中就可以看出这两种工厂模式的优劣
现在是只有两种手机产品,如果要新增一种手机,那么工厂方法模式需要新建一个工厂类实现Factory 接口
而对于抽象工厂模式来说 ,只需要在AbstractFactory 和PhoneFactory 中增加一个方法实现.
就可扩展性来说抽象工厂模式明显更强大