目录
工厂模式介绍:
例题:
第一步创建接口(Fruit.java):
第二步创建实现接口的子类:
第三步创建工厂:
最后一步:
输出效果:
工厂模式介绍:
工厂模式(Facory pattern)是java中常用的设计模式之一。这种类型的设计模式属于创建模型式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口实现的。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到其子类进行。主要解决接口选择问题的问题,我们明确地计划不同条件下创建不同实例时。让其子类实现工厂接口,返回的也是一个抽象的产品。
优点:我需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统种类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖,这并不是什么好事。
例题:
定义一个水果接口Fruit,其中包含有吃水果的方法eat(),定义两个子类,苹果类Apple和橘子类Orange,利用工厂设计模式定义一个工厂类Factory,其中包含有一个静态方法Fruitgetinstance(String classname),根据该方法的参数实例化子类对象并返回,给出测试类以测试子类"吃苹果"和"吃橘子"的行为。
第一步创建接口(Fruit.java):
public interface Fruit {
//定义抽象方法吃水果
void eat();
}
第二步创建实现接口的子类:
分别实现接口的eat方法。
public class Apple implements Fruit{
public void eat(){
System.out.println("Apple类中的eat方法--吃苹果");
}
}
public class Orange implements Fruit{
public void eat(){
System.out.println("Orange中的eat方法---吃橘子");
}
}
第三步创建工厂:
对类名进行合理的检测,如果合法就实例化子类
public class Factory {
//识别不同的类名
public static Fruit Fruitgetinstance(String classname){
if(classname == null){
return null;
}
if(classname.equals("Apple")){
return new Apple();
}else if (classname.equals("Orange")){
return new Orange();
}
return null;
}
}
最后一步:
使用静态的工厂方法,通过传递类型信息来获取实体类的对象。
public class TestFactory {
public static void main(String[] args) {
Fruit f1=Factory.Fruitgetinstance("Apple");
Fruit f2 = Factory.Fruitgetinstance("Orange");
f1.eat();
f2.eat();
}
}
输出效果:
写在最后:祝大家五一快乐!